2011-07-06 9 views
7

Przechowujemy bloki treści HTML w MySQL (jest to sformatowany tekst utworzony w CKeditor, Ckeidor dodaje wbudowane style CSS do formatowania tekstu). Przechowujemy bazę danych w kolumnie o nazwie "page_content"Ignorujesz znaki HTML podczas przeszukiwania przechowywanej zawartości HTML PHP/MySQL?

Chcemy funkcji wyszukiwania, która umożliwia użytkownikom wyszukiwanie tekstu (tylko). Jednak nie chcemy, aby wyszukiwanie zwracało znaki HTML, co dzieje się właśnie teraz. Na przykład, jeśli przeszukujemy "czcionkę", nie chcemy, aby wyniki wyszukiwania zwracały strony ze stylami HTML <font>

Czy istnieje sposób na zignorowanie znaków HTML/CSS podczas wyszukiwania przechowywanych w HTML treści z MySQL?

Odpowiedz

4

Czy bierzesz pod uwagę utworzenie osobnej tabeli dla tych poszukiwań? MySQL's full text search działa tylko z tabelami MyISAM, więc prawdopodobnie nie chcesz mieszać, że wyszukiwanie pełnotekstowe z ważnymi danymi (chyba że, oczywiście, masz dziwny niesmak dla obcych kluczy i integralności referencyjnej).

Podejście Użyłem w przeszłości jest w zasadzie tak:

  • Ustaw osobną tabelę z prostym (id, SEARCH_TEXT) struktury.
    • id pasuje do id rzeczy, której szukasz.
    • search_text to wszystko (tekst podstawowy, tytuł, nazwisko autora, ...), który ma zostać przeszytkowany w jedną bryłę tekstu.
  • Dodaj full text indexing do tabeli wyszukiwania.
  • Zaktualizuj proces aktualizacji bazy danych, aby utworzyć odpowiedni ciąg znaków search_text jako zwykły tekst; w tym miejscu można by było rozciąć kod HTML i ewentualnie zastosować inne odwzorowania (takie jak rozwijanie rzeczy takich jak "A +" do czegoś, co znajdzie wyszukiwanie pełnotekstowe).
  • Podczas wyszukiwania stosuje się te same mapowania, które stosuje się do danych do wyszukania, a następnie należy szukać w wynikach wyszukiwania pasujących wyników.

Rozwiązuje to Twój problem HTML, umożliwia łatwe wyszukiwanie treści w języku HTML i umożliwia dostrojenie wyników wyszukiwania poprzez ważenie różnych składników tekstu wyszukiwania poprzez powtarzanie (np. Jeśli chcesz, by znaczniki były ważniejsze niż tekst podstawowy, po prostu dodaj znaczniki dwa lub trzy razy podczas budowania search_text).

Będziesz musiał przetworzyć tekst, aby usunąć lub zignorować kod HTML. Takie podejście pozwala zrobić to tylko raz, zamiast wykonywać to przy każdym wyszukiwaniu.

+0

Jedyne, czego nie ma w tym rozwiązaniu, to możliwość przeszukiwania określonego pola w wyniku połączenia całego tekstu dla pojedynczego elementu. Na przykład nie można znaleźć w tytule wszystkich elementów z "foo", ponieważ obiekty z "foo" w treści również byłyby zgodne. –

+0

@Chris: Ale możesz ominąć to z dodatkowymi kolumnami, jeśli to konieczne. –

+0

@Chris, nie możemy usunąć HTML. Jest to sformatowana zawartość przy użyciu programu Ckeditor (nachylenie stylów CSS). – user635800

Powiązane problemy