2010-02-08 2 views
6

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

Пример: поле «животное» со следующими записями:

 A horse 

     Black horse 

     Black horse 

La граненый поиск отправляет обратно «лошадь (3)» как лучший результат, в то время как я хотел бы вернуться «Черный конь (2) ».

И это schema.xml. Поле поиска - BUSQUEDA, а гранжевое поле - SUPERFICIE. Я думаю, что я попробовал большинство возможных комбинаций определенных типов для этих двух полей, но все еще не работает.

<?xml version="1.0" encoding="UTF-8" ?> 
     <schema name="example" version="1.2"> 
     <types> 

    <fieldType name="string" class="solr.StrField"/> 

    <fieldType name="facet_texPersonal" class="solr.StrField" sortMissingLast="true" omitNorms="true"> 
      <analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="facet_tex" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
      <analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
      <filter class="solr.TrimFilterFactory" /> 
      </analyzer> 
      </fieldType> 

      <fieldType name="text" 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="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      </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="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100" > 
      <analyzer> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0"  catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="textMultidioma" 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"/> 
      </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"/> 
      </analyzer> 
      </fieldType> 

     </types> 

     <fields> 
      <field name="BUSQUEDA" type="facet_tex" indexed="true" stored="true"/> 
      <field name="SUPERFICIE" type="facet_tex" indexed="true" stored="true"/> 
      <field name="NOMBRE" type="string" indexed="true" stored="true"/> 
     </fields> 
     <uniqueKey>NOMBRE</uniqueKey> 
     <defaultSearchField>BUSQUEDA</defaultSearchField></schema> 

Любые предложения?

Спасибо за кучу заранее!

+0

Вы восстановили свой индекс после изменения каждого типа поля? –

+0

Я пытался это сделать, но ничего нового не произошло. Кажется, я ошибаюсь, чего не вижу. – Carlos

ответ

3

Вы должны выполнить грань в поле без знака (класс поля solr.StrField или с помощью solr.KeywordTokenizerFactory). This thread подробно объясняет это.

+0

Я пытался это сделать, но, похоже, это не работает. Я все равно получаю те же результаты. В любом случае, спасибо за вашу помощь – Carlos

+0

@ Карлос: что ты пробовал? разместить свой schema.xml –

+0

Я попытался с Búsqueda быть «facet_texPersonal» и то, что я получаю: A (1) черный (2) Это как если он рассматривается только первое слово – Carlos

3

У нас были многословные ограненные поля, работающие над проектом, над которым я работал ранее. Здесь (частично) schema.xml, относящиеся к этому:

<schema name="example" version="1.2"> 
<types> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
    ... 
</types> 
<fields> 
    <field name="grant_type" type="string" indexed="true" stored="true" /> 
    ... 
</fields> 
</schema> 

В Маурисио выделено поле фасета должно быть не-лексемы (не разбит на отдельные слова). В приведенной выше конфигурации мы используем тип поля «solr.StrField» (не токенизированный).

Дальнейшие подсказки для типов фасетированных полей (не преобразование в строчные буквы, не раздевание пунктуации и т. Д.) Можно найти на the Solr Faceting Overview page.

Смежные вопросы