Solr индексирует короткие дефисные слова с номерами - PullRequest
1 голос
/ 10 октября 2019

Я искал переполнение стека по этому вопросу, но ни один из них не адресован конкретному шаблону буква-дефис-номер, который, как представляется, является специфическим случаем, с которым у Solr возникли проблемы.

У нас есть продукты с короткими дефис-буквенно-цифровыми словами, которые нуждаются вбыть проиндексированным в Solr и быть доступным для поиска. Например, продукт под названием «aimpoint t-2». Пользователь должен иметь возможность запросить «t-2» или «aimpoint t-2», чтобы получить результат.

Я перепробовал все возможные комбинации токенизатора и фильтра и не могу этого сделать, надеюсь, я упустил что-то простое.

Соответствующий раздел schema.xml (Solr 6.5):

<field name="product_name" type="text_en" indexed="true" stored="true" multiValued="false" />

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
            <filter class="solr.FlattenGraphFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
        </analyzer>
    </fieldType>

Заранее спасибо

ОБНОВЛЕНИЕ 1:

За ответ MatsLindh У меня есть ответследующий обновленный schema.xml

<fieldType name="text_en" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        </analyzer>
    </fieldType>

Вот вывод вкладки анализа: enter image description here

А вот данные запроса отладки:

https://gist.githubusercontent.com/jordotech/d73fecfe6e6c0ee8c2177ea2bd9d5ff2/raw/6969686eef7a43f2072849138a7178b41692e6a8/query_debug.json

Может ли это быть как-то связано с этой частью отладочного json?

"parsedquery":"+(+SynonymQuery(Synonym(text:t text:t2)) +text:2)",
    "parsedquery_toString":"+(+Synonym(text:t text:t2) +text:2)",

Кажется, что он удаляет дефис

1 Ответ

1 голос
/ 10 октября 2019

У Solr нет особых проблем с - в процессе индексирования - любая обработка будет определяться правилами токенизаторов и фильтров, и вы можете использовать вкладку Analysis в интерфейсе администратора Solr, чтобы точно видетькак ваш текст обрабатывается на каждом этапе вашей цепочки.

Вам понадобится WhitespaceTokenizer, чтобы разделить только на (а не -, который StandardTokenizer или ClassicTokenizerбудет разделен на. Классический токенизатор должен оставить t-2 в покое, но ваши следующие шаги не будут).

Вы также сбросите WordDelimiterGraphFilterFactory, если не хотите разделитьэто далее (то есть, если вам нужно поддерживать поиск только t, а не только t-2.

Из описания фильтра графа слова-разделителя:

Не алфавитно-цифровойсимволы (отбрасываются): «горячая точка» -> «горячая точка», «горячая точка»

.. это не то, что вам нужно, если вы хотите сохранить токен как t-2.

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