Solr Analyzer для индексации терминов с пробелами и специальными символами - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу создать анализатор в Solr 7.7, который соответствует Условиям для запроса и Условиям для индексации :

  1. Срок до индекса : "Лапша Мэйси"

Условия для запроса : "Лапша Мэйси", "Лапша маки","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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...