Сбой поиска ShingleFilter с большим количеством терминов, чем в индексированной фразе - PullRequest
0 голосов
/ 13 июля 2010

Я использую 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'

Есть что-то, что я пропускаю или делаю что-то не так?

1 Ответ

0 голосов
/ 16 июля 2010

В запросе dismax оценка запроса является максимумом подзапросов.Не сумма.Я на самом деле не очень разбираюсь в том, как он разбирает запросы на гальку, но если он делает что-то вроде "(title1: (shingle1 shingle2 ...)) (title2: (shingle1 shingle2 ...))", то вы должны увидетьтолько одно поле влияет на счет.

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