2016-03-05 2 views
1

Я читал много страниц за последние несколько дней, но могу найти любые образцы для настройки полевого анализатора для следующей ситуации:
- значение поля может содержать оба параметра? и *:
SOLR: как использовать подстановочный знак и знак вопроса в значении поля

  • abcdef1;
  • ab? De? 2;
  • abc? E *.
- запрос может содержать и его:
  • «ab ?? e *» и «ab *» - в результате должны быть разрешены все документы;
  • "ab1 *" - только второй.

Можно ли настроить SOLR таким образом?

+1

Пожалуйста, переформатируйте вопрос. Это очень сложно. –

+0

Хорошо, теперь это должно быть более ясно. –

ответ

0

В этом случае вам может потребоваться создать свой тип поля и применить его к полю.

Ваш тип поля должен состоять из такого токенизатора и фильтра, который будет генерировать токены.

Подробнее о том, как использовать токенизатор и фильтровать на странице вилки solr, можно подробнее.

У вас также может быть различный анализатор для индексирования и запроса.

Это также зависит от вашего требования.

Я предлагаю вам попробовать ниже типа поля.

Вы можете добавить ниже тип поля в свой schema.xml. Используйте поле типа partial_search для вашего поля (ов), где вы хотите выполнить поиск по частям/подстановочным символам.

Как только вы закончите с изменениями schema.xml, вам необходимо перезапустить сервер и повторно проиндексировать данные.

<fieldType name="partial_search" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
</fieldType> 
+1

Нельзя использовать более одного токенизатора, поэтому он должен выглядеть следующим образом: ' < класс токенизатор = "solr.KeywordTokenizerFactory" /> <фильтр класс = "solr.NGramFilterFactory" minGramSize = "2" maxGramSize = "10" /> <фильтр класс = "solr.LowerCaseFilterFactory" /> <анализатор типа = "запрос"> <токенизатор класс = "solr.KeywordTokenizerFactory" /> <фильтр класса = "solr.LowerCaseFilterFactory" /> ' –

+0

в любом случае ваш подход хорош и охватывает много о f, за исключением следующих: field = 'ab? de? 2' и query =' ab1 * '. И еще один: field = 'ab *' и query = 'ab1234'. –

+0

Я думаю, что об ab? De? 2 достичь невозможно ... Поскольку вы не сможете создавать такие жетоны ... все же вы можете попробовать с вашего конца ... что я предлагаю использовать ngram, вы могли бы способный добиваться частичного или подстановочного поиска ... когда у вас есть текст, похожий на слово «abhijit» ... тогда с указанным типом поля вы создадите токены, такие как ab, abh, abhi, abhij, Abhijit, Abhijit, bh, bhi, bhij ... и т. д., и если вы запрашиваете ... bhi..если вы должны получить результат как abhijit ... –