Я хочу создать анализатор в Solr 7.7, который соответствует Условиям для запроса и Условиям для индексации :
Срок до индекса : "Лапша Мэйси"
Условия для запроса : "Лапша Мэйси", "Лапша маки","macy", "macys", "macy's"
Срок до индекса : "my.shop"
Условия запроса : "my shop", "my.shop "," myshop "
Срок до индекса : "Best Value Store"
Условия запроса : "bestvalue store", "bestхранилище значений "," лучшее значение "
Срок к индексу : "Coffee Shop"
Условия запроса : "coffeeshop", "coffee shop"
Вот следующие анализаторы, которые я пробовал:
Анализатор 1
<fieldType name="text_searchable" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" stemEnglishPossessive="0" splitOnCaseChange="1" preserveOriginal="0" />
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" format="solr" ignoreCase="false" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" stemEnglishPossessive="0" splitOnCaseChange="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
Работает для 2 и 4.
Не работает для 1. Во время индекса генерируются токены "macysnoodles", "macy", "noodles". Во время запроса токенами, сгенерированными для запроса "лапша macys", являются "macys" и "лапша".
Не работает для 3. Во время индекса сгенерированными токенами являются "bestvaluestore", "best", "значение»,„магазин“. Во время запроса токенами, сгенерированными для запроса «bestvalue store», являются «bestvalue» и «store».
Анализатор 2
<fieldType name="text_searchable_2" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" stemEnglishPossessive="0" splitOnCaseChange="1" preserveOriginal="0" />
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" format="solr" ignoreCase="false" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" stemEnglishPossessive="0" splitOnCaseChange="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
</analyzer>
</fieldType>
Приведенный выше анализатор работает для1, 2.
Не работает для 3. Во время индекса генерируются токены «best», «value», «store». Во время запроса токенами, сгенерированными для запроса «bestvalue store», являются «bestvalue» и «store».
Не работает для 4. Во время индекса сгенерированными токенами являются «coffee», «shop»,Во время запроса токенами, сгенерированными для запроса «coffeeshop», являются «coffeeshop»
Анализатор 3
<fieldType name="text_searchable_3" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="1" stemEnglishPossessive="0" splitOnCaseChange="0" preserveOriginal="0" types="wdf.txt" />
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" stemEnglishPossessive="0" splitOnCaseChange="1" preserveOriginal="0" />
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" format="solr" ignoreCase="false" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" stemEnglishPossessive="0" splitOnCaseChange="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
</analyzer>
</fieldType>
Вышеупомянутый анализатор работает для 1 (но генерирует дубликаты токенов)), 2 и 4.
Не работает для 3. Во время индекса генерируются токены «bestvaluestore», «best», «value», «store». Во время запроса токенами, сгенерированными для запроса «bestvalue store», являются «bestvalue» и «store».