Запрос Solr против запроса фильтра не работает одинаково - PullRequest
1 голос
/ 12 декабря 2011

Я уже некоторое время использую solr (acts_as_solr), но натолкнулся на очень странную вещь, которую я не могу заставить работать.

У меня есть текстовое поле, которое можно назвать

audience = [students, teachers, students_teachers, none]

когда я отправляю запрос

q= audience:students 

возвращает только те, у кого установлено это значение.

пока, если я сделаю

fq= audience:students

Я получаю результаты с обоими [студентами, студентами-учителями]

Я пытался поместить в запрос фильтра кавычки, парены и все виды, но похоже, что он не соблюдает их, как я ожидал. Я на самом деле здесь использую отрицательную сторону fq, чтобы скрыть от пользователя некоторые результаты.

Я использую Solr 1.4.1

Есть мысли? Я собираюсь изменить параметры на уникальные слова без повторного использования. Может быть проблема с _ в именах.

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </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"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>

1 Ответ

2 голосов
/ 15 декабря 2011

WordDelimiterFilterFactory в вашем типе поля, вероятно, генерирует термины «студенты» и «учителя» из строки «student_teachers».

Так что при поиске «студентов» он также соответствует строке, которая изначально была"student_teachers".

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

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