#solr
Вопрос:
Я новичок в мире Solr, и у меня есть Solr 7.7.2
Я пытаюсь выполнить поиск по диким картам, но он не возвращает никаких результатов. Ниже приведен мой индекс, анализатор запросов, настроенный для типа поля.
Пример текста: Стандартный анализатор запросов Solr поддерживает поиск по подстановочным знакам с одним и несколькими символами в пределах одного термина.
В приведенном выше примере текста я хотел бы выполнить поиск по стандарту*, чтобы соответствовать стандарту word. Спасибо за вашу помощь в этом.
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="0"/>
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
</fieldType>
Комментарии:
1. подстановочный знак будет работать в строковом поле, а не в текстовом поле
2. Привет, Абхиджит, спасибо за твой ответ. Но простой строковый тип поля также не работает. стандартное значение поля (Индекс) и стандартное* Значение поля (запрос) не совпадают.
3. вам необходимо перезагрузить сервер после внесения изменений…
4. Я не изменил тип поля. Просто используйте экран анализа на портале администратора и попробуйте проверить, выбрав поле в качестве строки и запустив выше
5. Это зависит. Какой текст вы хотите проиндексировать и как вы хотите его сопоставить? If
standard
-это слово в тексте (т. е.this is standard
, имеющее только белый символ и фильтр нижнего регистра, который должен позволять вам это делатьfield:standar*
, чтобы соответствовать одномуstandard
маркеру. Для более продвинутой обработки потребуется фильтр NGramFilter
Ответ №1:
После еще нескольких часов анализа добавил EdgeNgramfilter, и это сработало. Я предполагаю, что при использовании большого текстового поля возникнут проблемы с производительностью. Возможно, мне придется это проверить.
<filter class="solr.EdgeNGramFilterFactory" minGramSize="5" maxGramSize="10"/>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="0"/>
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
<filter class="solr.FlattenGraphFilterFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="5" maxGramSize="10"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>