Dieser Artikel wurde auch auf VASILY DEVELOPERS BLOG mit demselben Inhalt veröffentlicht. Bitte lesen Sie andere Artikel, wenn Sie möchten.
Hallo, das ist Shiozaki von den Backend-Ingenieuren. Bisher verwendete der iQON-Index für die Volltextsuche nur morphologische Analysen, aber neulich haben wir die Suche auch mit Ngram verbessert. Infolgedessen hat sich die Anzahl der Treffer in den Suchergebnissen verbessert, und die Zunahme des Suchrauschens wurde auf ein geringes Maß unterdrückt.
In diesem Artikel werde ich die Vorteile der gemeinsamen Verwendung von Ngram und die Verwendung mit Apache Solr vorstellen.
Wie ist der Zustand "Suchen, aber nicht Finden der gewünschten Informationen"? Lassen Sie uns diesen Zustand in die folgenden zwei Zustände aufteilen.
Der erste Status lautet "Die gewünschten Informationen sind weniger in den Suchergebnissen enthalten". Wenn Sie beispielsweise auf einer Reiseinformationsseite nach "Tokio" suchen, enthält die Datenbank Tausende von Daten, aber nur wenige Suchergebnisse.
Der zweite Status lautet "Es gibt viele unerwünschte Informationen in den Suchergebnissen". Wenn Sie nach "Tokio" suchen, enthalten die Suchergebnisse neben Informationen zu Tokio auch Informationen zu anderen Bereichen wie Kyoto und Osaka.
In vielen Fällen treten die beiden oben genannten Zustände gleichzeitig auf, wenn Sie nicht finden können, was Sie wirklich wollen. Mit anderen Worten, nicht alle Informationen, die der Benutzer möchte, werden als Suchergebnis zurückgegeben, und die Informationen, die der Benutzer nicht möchte, werden auch als Suchergebnis zurückgegeben.
Das Ben-Diagramm sieht wie folgt aus. Alle in der Datenbank gespeicherten Informationen werden nach den beiden Achsen klassifiziert, ob sie als Suchergebnis zurückgegeben wurden und ob es sich um die gewünschten Informationen handelte.
Geben Sie dann jedem Satz einen Namen zur weiteren Erläuterung. "Richtiges Ergebnis" wird als Suchergebnis zurückgegeben und die vom Benutzer angeforderten Informationen werden als Suchergebnis zurückgegeben, aber "Suchrauschen" wird als die vom Benutzer nicht angeforderten Informationen zurückgegeben. Informationen, die nicht in den Ergebnissen enthalten sind, werden als "fehlende Suche" bezeichnet.
Im Bereich des Informationsabrufs werden sie übrigens als "True Positive", "Flase Positive" bzw. "False Negative" bezeichnet.
In dieser Figur entspricht der Zustand mit vielen Suchauslassungen dem oben erläuterten ersten Zustand, und der Zustand mit vielen Suchgeräuschen entspricht dem zweiten Zustand. Das Verbessern der Suchergebnisse ist nichts anderes als das Reduzieren der Anzahl von Suchgeräuschen und Auslassungen und das Abgleichen der Suchergebnisse mit den gewünschten Informationen.
Das Reduzieren dieser beiden ist jedoch ein Kompromiss. Oft wird die Verbesserung des einen das andere verschlimmern.
In diesem Abschnitt werden die in der Volltextsuchmaschine durchgeführte Indexverarbeitung und die zuvor durchgeführte Wortzerlegung beschrieben. Die Volltextsuchmaschine erstellt einen Index, der als transponierter Index bezeichnet wird, um den Suchprozess zu beschleunigen. Der Translokationsindex ist ein assoziatives Array, dessen Schlüssel ein Wort in einem Satz ist, und der Wert ist das Array von Dokumenten, in denen das Wort vorkommt.
Dieser Bereich wird in der ersten Hälfte des neulich veröffentlichten TECH BLOG-Artikels ausführlich erläutert. Schauen Sie also bitte vorbei. http://tech.vasily.jp/entry/solr6-neologd
Um einen transponierten Index zu generieren, muss das Dokument in Wörter zerlegt werden. Es gibt zwei Methoden zur Wortzerlegung, z. B. Japanisch, bei denen Wörter nicht durch Leerzeichen getrennt sind: Ngram und morphologische Analyse.
Ich werde jede Funktion erklären.
Ngram Ngram ist eine Methode, um Sätze mechanisch in N Zeichen zu unterteilen und in Wörter zu zerlegen. Der N-Teil ändert sich abhängig davon, wie viele Zeichen getrennt sind, und wird auch als Bigram bezeichnet, wenn N = 2 und Trigramm, wenn N = 3. Von nun an wird N = 2 (Bigram) zur Erklärung verwendet.
bigram trennt das Dokument durch zwei Zeichen und betrachtet das Ergebnis als Wort. Zum Beispiel ist das Dokument "Tokyo Metropolitan Museum of Art" in die folgenden fünf Wörter unterteilt.
"Tokio" "Kyoto" "Tomi" "Kunst" "Kunstmuseum"
Wenn Sie dann eine Suche durchführen, wird die Suchabfrage auf ähnliche Weise in Wörter aufgeteilt und mit ihrem UND kombiniert. Suchen Sie beispielsweise für die Suchabfrage "Museum" unter der Bedingung "Kunst UND Kunstmuseum".
Der Vorteil von Ngram besteht darin, dass dies garantiert, dass keine Teilzeichenfolge mit N Zeichen oder mehr ausgelassen wird. Andererseits ist der Nachteil von Ngram, dass dieses "Tokyo Metropolitan Museum of Art" selbst für die Suchanfrage "Kyoto" getroffen wird.
Vorteile: Garantierte teilweise Übereinstimmungssuche Nachteile: Hohes Suchrauschen
Für die Wortteilung durch morphologische Analyse wird die Wortteilung in grammatikalisch bedeutsamen Einheiten unter Verwendung eines zuvor erstellten Wörterbuchs durchgeführt. Daher besteht der Vorteil darin, dass Probleme bei der Verwendung von Ngram wahrscheinlich nicht auftreten.
Andererseits ist es notwendig, ein Wörterbuch im Voraus vorzubereiten, und wenn die Leistung des Wörterbuchs niedrig ist, verschlechtert sich die Suchleistung. Wenn Sie beispielsweise "ausländische Regierung" in "ausländische", "Karotte" und "Regierung" aufteilen, wird das Dokument nicht in der Suchabfrage "Regierung" angezeigt.
Darüber hinaus verwendet kuromoji, ein in Solr und Elastic Search standardmäßig installierter morphologischer Analysator, ein IPA-Wörterbuch. Dieses Wörterbuch weist jedoch eine Schwäche auf, die nicht so stark gegen die richtige Nomenklatur in einem bestimmten Bereich ist. Infolgedessen wird die richtige Nomenklatur, die ursprünglich ein Wort sein sollte, häufig in mehrere Wörter unterteilt. Beispiel: "Rokushitan" → "Roku" "Shitan"
Andererseits gibt es ein anderes Problem bei der Verwendung einer richtigen Nomenklatur als ein Wort. Wenn Sie beispielsweise die richtige Nomenklatur "Kansai International Airport" als ein einziges Wort indizieren, werden Dokumente mit "Kansai International Airport" in Suchanfragen wie "International Airport" und "Airport" nicht berücksichtigt. Um dieses Problem zu lösen, hat Kuromoji die Funktion, das Wort "Kansai International Airport" weiter zu unterteilen und insgesamt 4 Wörter zu indizieren, einschließlich der 3 Wörter "Kansai", "International" und "Airport". Ein solches Verhalten hängt jedoch auch vom Wörterbuch und dem morphologischen Analysator ab, und es gibt keine Garantie dafür, dass eine teilweise Übereinstimmungssuche möglich ist.
Vorteile: Geringes Suchrauschen Nachteil: Abhängig von der Leistung des Wörterbuchs gibt es viele Suchauslassungen
Die Vor- und Nachteile von Ngram und morphologischer Analyse sind in der folgenden Tabelle in Bezug auf die Anzahl der Suchgeräusche und die Anzahl der Suchauslassungen zusammengefasst.
Suchrauschen | Suchauslassung | |
---|---|---|
Ngram | Viele | Wenige |
Morphologische Analyse | Wenige | Viele |
Diese Abbildung zeigt auch, dass es einen Kompromiss zwischen der Reduzierung des Suchrauschens und der Reduzierung von Suchauslassungen gibt.
Durch die Verwendung dieser beiden zusammen ist es jedoch möglich, die Anzahl der Suchauslassungen und die Anzahl der Suchgeräusche im Vergleich zu dem Fall, in dem jedes für sich allein verwendet wird, erheblich zu reduzieren.
Die spezifische Methode, um sie zusammen zu verwenden, ist wie folgt.
** Indexerstellungsprozess **
** Suchvorgang **
Reduzieren Sie Suchauslassungen, indem Sie zwei Suchergebnisse zusammenführen. Durch einfaches Zusammenführen wird jedoch das Suchrauschen erhöht. Der Schlüssel zu dieser kombinierten Verarbeitung besteht darin, die Ergebnisse der morphologischen Analyse so zusammenzuführen, dass sie wahrscheinlich am Anfang stehen. Wenn Benutzer Suchergebnisse anzeigen, beginnen sie von vorne. Wenn sie also zu Beginn Informationen wünschen, sind sie möglicherweise zufrieden und hören auf, nachfolgende Ergebnisse anzuzeigen. In solchen Fällen kann davon ausgegangen werden, dass das Suchrauschen nicht wesentlich zugenommen hat.
Erklärt, wie eine bestimmte Solr-Einstellungsdatei geschrieben und eine Abfrage geschrieben wird.
Ich habe dieses Verhalten in Solr 6.2.1 bestätigt, aber ich schreibe nicht in einer bestimmten Version, daher denke ich, dass es in anderen Versionen von Solr funktionieren wird.
Erstens ist der Teil der Indexgenerierung. Schreiben Sie die folgenden drei Informationen in das verwaltete Schema.
Es definiert text_ja_ngram, einen Feldtyp für die Indexgenerierung in Ngram, und text_ja, ein Feld für die Indexgenerierung in der morphologischen Analyse.
<fieldType name="text_ja_ngram" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.ICUNormalizer2CharFilterFactory" name="nfkc"/>
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_ja" class="solr.TextField" autoGeneratePhraseQueries="false" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.ICUNormalizer2CharFilterFactory" name="nfkc"/>
<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.JapaneseBaseFormFilterFactory"/>
<filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_ja.txt" ignoreCase="true"/>
<filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Definieren Sie dann die Felder für diese Feldtypen.
<field name="search_ngram" type="text_ja_ngram" multiValued="true" indexed="true" required="false" stored="true"/>
<field name="search" type="text_ja" multiValued="true" indexed="true" required="false" stored="true"/>
Verwenden Sie schließlich copyField, um das zu durchsuchende Feld in die beiden oben genannten Felder zu kopieren.
<copyField source="title" dest="search_ngram" />
<copyField source="title" dest="search" />
<copyField source="description" dest="search_ngram" />
<copyField source="description" dest="search" />
...
Damit ist die Einstellung des Indexgenerierungsteils abgeschlossen. Versuchen wir zu bestätigen, dass diese mit der Analysefunktion ordnungsgemäß funktionieren.
Index von Ngram
Index durch morphologische Analyse
Das Folgende ist eine Abfrage, die für diese Felder ausgegeben werden soll.
Verwenden Sie die eDisMax-Abfrage, um mehrere Felder zu durchsuchen. Sie können mit beiden Feldern suchen, indem Sie die folgenden Parameter abfragen.
Die durch qf angegebenen 100 und 50 sind die Gewichte der jeweiligen Felder. Je höher das Gewicht, desto einfacher ist es, dass das Dokument, das auf dieses Feld trifft, zuerst angezeigt wird. Um sich hier umzuschalten, muss der Wert geändert werden, während die Suchergebnisse angezeigt werden.
Durch die gemeinsame Verwendung von morphologischer Analyse und Ngram konnten wir Suchauslassungen reduzieren und die Zunahme des Suchrauschens unterdrücken. Infolgedessen hat iQON die Suche nach Produkten mit der Abkürzung des Markennamens ermöglicht. Beispielsweise können Sie jetzt das Produkt "JIMMY CHOO" mit der Suchabfrage "JIMMY" aufrufen.
Recommended Posts