Есть два поля в моей схеме:. field1
в использовании keyword
Tokenizer фильтра, который сохраняет маркера, как это (даже не разделяя на пространстве я проверил что на вкладке анализа.) field2
использует WhitespaceTokenizerFactory
, который разбивает слова на пробелы и вкладки и т.д.edismax с несколькими словами для ключевого слова Tokenizer расщепления на пространстве
<field name="field1" type="field1_type" indexed="true" stored="false"/>
<field name="field2" type="field2_type" indexed="true" stored="false"/>
<fieldType name="field2_type" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> </analyzer> </fieldType>
Я использую edismax
парсер со значением по умолчанию qf
= field1
field2
Теперь, когда я запрашивая с q=hello world
В режиме deugging его, показывая, что его создание запроса как
rawquerystring: привет мир
QueryString: привет мир parsedquery: (+ ((DisjunctionMaxQuery ((field1: привет | field2: привет)) DisjunctionMaxQuery ((field1: мир | field2: мир))) ~ 1) ())/no_coord
parsedquery_toString: + (((field1: привет | field2: привет) (field1: мир | field2: мир)) ~ 1)()
Что я ожидал что-то вроде этого:
ожидается: + (((field1: привет мир) ((field2: hello) (field2: world)) ~ 1)()
т.е. для field1
он не должен нарушать запрос на пространстве, как он использует токенизатор ключевого слова в то время как он должен разбить запрос на пространстве для field2
. Можете ли вы рассказать, что я делаю неправильно?
спасибо, что решил проблему :) –
@SankalpGupta Пожалуйста, примите ответ, если он решит ваш вопрос. – MatsLindh