2011-01-19 2 views
2

Я индексирую названия фильмов. В настоящее время у меня есть два поля.Solr/Lucene: возможно, что строки имеют токенизацию?

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

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

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

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

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

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

  • Возможно ли это иметь строку настроенной
  • Какого поля configuraition/analyzation вы рекомендовали бы для этого случая использования?

ответ

2

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

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

2

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

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

<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> 
Смежные вопросы