Heim  >  Artikel  >  Datenbank  >  Ein kurzes Tutorial zur MySQL-Volltextindexanwendung

Ein kurzes Tutorial zur MySQL-Volltextindexanwendung

黄舟
黄舟Original
2017-02-07 17:08:151264Durchsuche

In diesem Artikel werden die Grundkenntnisse des MySQL-Volltextindex unter folgenden Aspekten vorgestellt:

  1. Mehrere Überlegungen zum MySQL-Volltextindex

  2. Syntax des Volltextindex

  3. Einführung in mehrere Suchtypen

  4. Beispiele für mehrere Suchtypen

Mehrere Hinweise zum Volltextindex


  • Die Suche muss in einer Indexspalte vom Typ Volltext und der in match angegebenen Spalte erfolgen muss im Volltext angegeben werden

  • kann nur auf Tabellen angewendet werden, deren Tabellen-Engine vom Typ MyIsam ist (MySQL 5.6 und höher kann auch in der Innodb-Tabellen-Engine verwendet werden)

  • Volltextindizes können nur für Spalten vom Typ char, varchar und text erstellt werden

  • Wie gewöhnliche Indizes können sie beim Definieren der Tabelle angegeben oder hinzugefügt werden oder nach dem Erstellen der Tabelle geändert werden

  • Bei einer umfangreichen Datensatzeinfügung ist das Einfügen von Daten in eine Tabelle ohne Index und das anschließende Erstellen eines Index viel schneller als das Einfügen in Daten Tabelle mit einem Index

  • Die Suchzeichenfolge muss eine konstante Zeichenfolge sein und darf nicht der Spaltenname der Tabelle sein

  • Wenn die Selektivität der Suchdatensatz 50 % übersteigt, wird davon ausgegangen, dass keine Übereinstimmung vorliegt (beschränkt nur in der natürlichen Suche)

Syntax der Volltextindexsuche

MATCH (Spaltenname 1, Spaltenname 2,…) GEGEN (Suchzeichenfolge [Suchmodifikator])

Die in Übereinstimmung angegebenen Spaltennamen 1, 2 usw. sind die Spaltennamen, die beim Erstellen des Volltextindex angegeben wurden. Die nachfolgenden Suchmodifikatoren werden wie folgt beschrieben:

search_modifier:
{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}

Wie viele Einführung in die drei Suchtypen


Die Suchmodifikatoren oben veranschaulichen tatsächlich 3 Volltextsuchtypen

IM NATÜRLICHEN SPRACHMODUS

Einführung: Standardsuchformular (ohne Suchmodifikator oder der Modifikator befindet sich IM NATÜRLICHEN SPRACHMODUS)

Funktionen:


  1. Die Zeichen in der Suchzeichenfolge werden in normale Zeichen analysiert und haben keine besondere Bedeutung

  2. Filtern Sie die Zeichenfolgen in der maskierten Zeichenliste

  3. Wenn die Selektivität eines Datensatzes 50 % überschreitet, wird dies normalerweise als Nichtübereinstimmung betrachtet

  4. Die zurückgegebenen Datensätze werden nach der Relevanz des Datensatzes sortiert und angezeigt


IM BOOLEAN-MODUS


Einführung: Suche im booleschen Modus (Wenn sich der Suchmodifikator im booleschen Modus befindet)

Funktionen:

  1. analysiert die Bedeutung von Sonderzeichen im Durchsuchen Sie die Zeichenfolge nach bestimmten Regeln und führen Sie einige logische Bedeutungsregeln aus. Zum Beispiel: Ein bestimmtes Wort muss vorkommen oder darf nicht erscheinen usw.

  2. Die von dieser Art der Suche zurückgegebenen Datensätze werden nicht nach Relevanz sortiert


MIT ABFRAGEERWEITERUNG

Einführung: Ein etwas komplexes Suchformular, das tatsächlich zwei natürliche Suchen durchführt und Datensätze direkt zurückgeben kann. Einführung in Datensätze zu sexuellen Handlungen Beziehungen, Modifikator IM NATÜRLICHEN SPRACHMODUS MIT ABFRAGEERWEITERUNG oder MIT ABFRAGEERWEITERUNG Modifikator

Funktionen: Diese Art der Suche bietet tatsächlich eine indirekte Suchfunktion, wie zum Beispiel: Ich suche ein Wort und die erste zurückgegebene Zeile enthält nicht eine der Zeichenfolgen im Suchbegriff. Ein zweiter Abgleich kann basierend auf den Datensatzwörtern des ersten Suchergebnisses durchgeführt werden, sodass es möglich ist, passende Datensätze mit einigen indirekten Beziehungen zu finden.

Beispiele für mehrere Suchtypen

Anwendung im NATURAL LANGUAGE MODE-Modus:

wird weiterhin auf die Produkttabelle angewendet, in der wir einen Volltextindex im Namen eingerichtet haben Da ich relevante Datensätze in der Namensspalte anhand von Schlüsselwörtern abgleichen muss

Die SQL-Anweisung lautet wie folgt:

SELECT * FROM product WHERE match(name) against(‘auto’)

Die Zeit ist nicht schlecht, ich habe mehr als 10.000 Datensätze erreicht Von fast 870.000, was zeitaufwändig ist, ist der Effekt immer noch gut

Hinweis: Standardmäßig werden Datensätze basierend auf der Relevanz von hoch nach niedrig zurückgegeben

Wir können eine Übereinstimmung auswählen (name) gegen('auto') FROM Produkt Überprüfen Sie den Korrelationswert des Datensatzes. Die Werte liegen zwischen 0 und 1. 0 bedeutet, dass der Datensatz nicht übereinstimmt

Mehrere wichtige Merkmale:

1. Welche Wörter werden ignoriert?

Der Standard-Volltextindex berücksichtigt Wörter mit mehr als 4 Zeichen als gültige Wörter. Wir können ft_min_word_len in der Konfiguration ändern >

Der Standard-Volltextindex blockiert Wörter in der Vokabularliste. Wörter werden blockiert, weil diese Wörter zu häufig vorkommen und keine semantische Wirkung haben, sodass sie im Suchvorgang ignoriert werden. Selbstverständlich ist diese Liste auch konfigurierbar.

2. So führen Sie eine Wortsegmentierung durch

Der Volltextindex betrachtet ein fortlaufendes gültiges Zeichen (den mit w im regulären Ausdruck übereinstimmenden Zeichensatz) als Wort, das auch a enthalten kann „‘“, aber fortlaufend. Zwei „‘s“ gelten als Trennzeichen. Andere Trennzeichen wie: Leerzeichen, Kommas, Punkte usw.


IM BOOLEAN-MODUS Anwendung:


Im Booleschen Matching-Modus können wir einige spezielle Symbole hinzufügen, um dem Suchprozess einige logische Funktionen hinzuzufügen. Wie zum Beispiel die auf der offiziellen Website bereitgestellten Beispiele (suchen Sie nach Anweisungen, die eine MySQL-Zeichenfolge enthalten und nicht Yousql enthalten):

SELECT * FROM articles WHERE MATCH (title,body)
-> AGAINST (‘+MySQL -YourSQL’ IN BOOLEAN MODE);

可见,我们对搜索的控制又多了一些,看起来“高大上”了些。

实际上,上面的操作隐含了几个意思:

  • 加号:相当于and

  • 减号:相当于not

  • 没有:相当于or


下面看下布尔类型搜索的几个重要特性: 


1. 没有50%记录选择性的限制,即使搜索结果记录超过总数的50%也同样返回结果

2. 不会自动的按记录的相关性进行降序排序

3. 可以直接应用在没有创建fulltext的全文索引上,但是这样会查询的非常慢,所以说还是别用了。

4. 支持最小、最大单词长度

5. 应用屏蔽词列表


布尔搜索支持的操作符:

n 加号 +:指示修饰的单词必须出现在记录中

n 减号 -:指示修饰的单词必须不能出现在记录中

n 没有任何操作符:单词可有可无,但是包含该词的记录相关性高

n 双引号 “ : 将一个词组作为一个匹配。如:”one word” 匹配one word在一起的单词


下面是官方的一些实例:

至少包含一个词的记录
‘apple banana’
必须包含着两个词
‘+apple +juice’
必须包含apple,包含macintosh的记录相关性高,也可以不包含
‘+apple macintosh’
必须包含apple且不能喊有macintosh
‘+apple -macintosh’
查找apple开头单词的记录
‘apple*’
完整匹配some words单词
‘”some words”‘

了解了基本的mysql全文索引知识,觉得它的全文索引比like当然是强了很多。但是面对高级的搜索还是略显简陋,且性能问题也是担忧。

以上就是MySQL 全文索引应用简明教程的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:MySQL8.0 kommtNächster Artikel:MySQL8.0 kommt