2010-02-08 33 views
6

Tôi đang thực hiện một số tìm kiếm có mặt nhưng có một số vấn đề. Tôi không nhận được kết quả mong muốn khi có một vài từ trong trường tìm kiếm mặt.Vấn đề với tìm kiếm mặt

Ví dụ: “động vật” lĩnh vực với các mục sau:

 A horse 

     Black horse 

     Black horse 

La sắc cạnh tìm kiếm gửi lại "ngựa (3)" như kết quả tốt nhất, trong khi đó tôi muốn được trở lại "Đen ngựa (2) ".

Và đây là tệp schema.xml. Trường tìm kiếm là BUSQUEDA và trường mặt là SUPERFICIE. Tôi nghĩ rằng tôi đã thử hầu hết các kết hợp posible của các loại được xác định cho hai lĩnh vực này nhưng vẫn không hoạt động.

<?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> 

Mọi đề xuất?

Cảm ơn một nhóm trước!

+0

bạn có xây dựng lại chỉ mục của mình sau mỗi thay đổi loại trường không? –

+0

Tôi đã cố gắng làm điều đó nhưng không có gì mới xảy ra. Tôi nghĩ rằng tôi có bất kỳ sai lầm tôi không thể nhận thấy. – Carlos

Trả lời

3

Bạn phải khía cạnh trên trường không được mã hóa (trường lớp solr.StrField hoặc sử dụng solr.KeywordTokenizerFactory). This thread giải thích chi tiết.

+0

Tôi đã cố gắng để làm điều đó, nhưng nó dường như không hoạt động. Tôi vẫn nhận được kết quả tương tự. Dù sao, cảm ơn sự giúp đỡ của bạn – Carlos

+0

@Carlos: bạn đã thử những gì? đăng schema.xml của bạn –

+0

Tôi đã thử với BUSQUEDA là "facet_texPersonal" và những gì tôi nhận được là: A (1) Đen (2) Nó giống như nếu nó chỉ được coi là từ đầu tiên – Carlos

3

Chúng tôi đã có các trường có nhiều từ làm việc cho một dự án mà tôi đã làm việc trước đây. Dưới đây là (một phần) schema.xml liên quan đến điều này:

<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> 

Vì Mauricio đã đánh dấu trường khía cạnh không được phân loại (không chia thành các từ riêng biệt). Trong cấu hình trên, chúng tôi đang sử dụng loại trường 'solr.StrField' (không được mã hóa).

Các gợi ý khác cho các loại trường mặt (không chuyển đổi thành chữ thường, không tước dấu câu, v.v.) có thể được tìm thấy trên the Solr Faceting Overview page.

Các vấn đề liên quan