Solr / Lucene: возможно ли иметь строки для токенов? - PullRequest
2 голосов
/ 19 января 2011

Я индексирую названия фильмов.В настоящее время у меня есть два поля.

Одно из них является предварительно сконфигурированным textgen, а другое - строкой, которую я изменил, чтобы не учитывать регистр.

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

Я использую обработчик запросов dismax.

Я делаю это, чтобы иметь возможность найти «кольца лордов» в названии «Властелин колец», но также повысить точныеМатчи.Так, например, у «лорда или колец» баллы выше, чем у «колец лорда», но оба они найдены.

Теперь я играл со строковыми полями, которые, по-видимому, необходимы для точного соответствия.

Но я просто не получаю никаких результатов.Я получаю результаты, только если я ищу точную строку.Даже пробелы не работают ...

  • Можно ли даже настроить строку
  • Какую конфигурацию / анализ полей вы бы порекомендовали для этого варианта использования?

Ответы [ 2 ]

2 голосов
/ 22 января 2011

Взгляните на пример solr / conf / schema.xml, есть много различных типов полей, хорошо документированных.

Для вашего типа поиска вам, вероятно, понадобится простой токенизированный регистр в нижнем регистре.поле с позициями, такими как:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StandardFilterFactory"/>
      <filter class="solr.ASCIIFoldingFilterFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

Ранжирование уже должно быть довольно хорошим с этим.

Для стандартного текстового поиска используются «стоп-слова» и «стволовые», чтобы улучшить ранжирование(как в поле ниже), но для поиска названий я бы, вероятно, не сделал этого:

 <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords_spanish.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.SnowballPorterFilterFactory" language="English">
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.SnowballPorterFilterFactory" language="English"/\
>
      </analyzer>
    </fieldType>
2 голосов
/ 19 января 2011

Поля «String» не являются токенами (поэтому будут работать только точные совпадения); Вы можете попробовать переключить его тип данных на «текстовый» или добавить WhitespaceTokenizer в свою цепочку.

Кроме того, вам не нужно увеличивать точные совпадения вручную, алгоритм скоринга сделает это за вас.

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