Я использую Solr 1.4.1 (Lucene 2.9.3) на окнах и пытаюсь понять ShingleFilter.Я написал следующий код и обнаружил, что если я предоставлю больше слов, чем фактическая фраза, проиндексированная в поле, то поиск по этому полю завершится неудачей, т. Е. Оценка из этого поля не будет оценена с помощью debugQuery = true.
Вотпример, который я создал для воспроизведения, с именами полей и индексированным документом:
Id: 1
title_1: Нина Симоне
title_2: я наложил на вас заклинание
Выпустите следующие запросы (dismax):
- «Нина Симоне, которую я положил» <- не может получить оценку в результате поиска title_1 (с помощью debugQuery) <br>- «Нина Симоне» <- УСПЕХ </p>
Попытка проанализировать вышеуказанное несоответствие,Когда я использовал Solr Field Analysis с полем «shingle» (приведено ниже) и попробовал «Nina Simone I put», это было успешно.Так что только во время запроса оценка не предоставляется.Я также проверил «parsedquery», и он показывает disjunctionMaxQuery, выдающий строку «Nina_Simone Simone_I I_put» в поле title_1.
поля title_1 и title_2 имеют тип 'shingle', определяемый как:
<fieldType name="shingle" class="solr.TextField" positionIncrementGap="100" indexed="true" stored="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
</analyzer>
</fieldType>
Обратите внимание, что у меня также есть поле catchall, которое является текстом.У меня qf установлено на: 'id ^ 2 catchall ^ 0.8', а pf установлено на: 'title_1 ^ 1.5 title_2 ^ 1.2'
Есть что-то, что я пропускаю или делаю что-то не так?