Странное поведение запроса нуждается в некоторой помощи для отладки этого - PullRequest
1 голос
/ 15 сентября 2010

Вот интересующая часть схемы:

    <fieldType name="text_rev" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.ASCIIFoldingFilterFactory" />
    <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.ASCIIFoldingFilterFactory" />
  </analyzer>
</fieldType>

Я получил поле с названием Title, используя этот fieldType, и некоторые продукты, название которых содержит «Harry Potter»

Запрос: "Title: Harry *" вернет 0 результатов, тогда как "Title: Harry" вернет много. Но дело в том, что «Title: Potter *» выдаст то же количество результатов, что и «Title: Potter»

Так почему же "Название: Гарри *" не дает никакого результата?

Редактировать: я нашел обходной путь, используя запрос: 'Title: "Harry *"' (Обратите внимание на использование ")

Вот отладка для запроса Заголовок: Harry, Заголовок: Harry *, Заголовок: "Harry *"

Название: Harry

  <str name="rawquerystring">Title:Harry</str> 
  <str name="querystring">Title:Harry</str> 
  <str name="parsedquery">Title:harri</str> 
  <str name="parsedquery_toString">Title:harri</str> 

Название: Harry *

  <str name="rawquerystring">Title:Harry*</str> 
  <str name="querystring">Title:Harry*</str> 
  <str name="parsedquery">Title:Harry*</str> 
  <str name="parsedquery_toString">Title:Harry*</str> 

Название: "Гарри *"

  <str name="rawquerystring">Title:"Harry*"</str> 
  <str name="querystring">Title:"Harry*"</str> 
  <str name="parsedquery">Title:harri</str> 
  <str name="parsedquery_toString">Title:harri</str> 

Ответы [ 2 ]

0 голосов
/ 16 сентября 2010

Причиной этого является сочетание LowerCaseFilterFactory и подстановочного запроса.При индексировании это (конечно) строчные буквы в ваших терминах - позволяя совпадать как «Гарри», так и «Гарри».

Когда вы делаете запрос с подстановочными знаками, например «Гарри *», нетанализ выполняется по условиям запроса - т.е. он не в нижнем регистре.Возможно, вы сможете обойти вашу проблему, уменьшив количество запросов на стороне клиента, если у вас нет требований, определяющих чувствительность к регистру.

0 голосов
/ 16 сентября 2010

Когда мы запрашиваем «Заголовок: Гарри *», на самом деле это поиск фразы для поля поиска по умолчанию.

Вот как он обрабатывается и присваивается полю поиска по умолчанию, в моем случае это Text. «Имя_пользователь: гарри *» «Имя_пользователь: гарри *» PhraseQuery (statusText: «имя пользователя Гарри») Текст: "имя пользователя Гарри"

"Title: Potter *" выдаст то же количество результатов, что и "Title: Potter" Это звучит очень странно, я думаю, будет 0 для обоих

Я предлагаю использовать параметр debugQuery = on, чтобы увидеть, как именно анализируется запрос. «Название: Гарри» возвращает результаты, потому что должен быть текст, содержащий эту фразу. Надеюсь, это поможет

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