2012-01-04 35 views
5

Tôi có tìm kiếm solr trả về kết quả nổi bật theo ngữ cảnh hiển thị url và email có khoảng trắng sau dấu chấm - như "www. Google. Com" hoặc "email @ google. Com" tắt tính năng này, vì vậy chúng hiển thị bình thường? Cảm ơn.url và email trong kết quả tìm kiếm solr

Query:

/solr/core1/select?q=email&start=0&rows=10&sort=score+desc&fq=%28categories%3A%28*8*%29%29&wt=javabin&version=2 

phần nổi bật trong cấu hình:

<searchComponent class="solr.HighlightComponent" name="highlight"> 
<highlighting> 
    <!-- Configure the standard fragmenter --> 
    <!-- This could most likely be commented out in the "default" case --> 
    <fragmenter name="gap" 
       default="true" 
       class="solr.highlight.GapFragmenter"> 
    <lst name="defaults"> 
     <int name="hl.fragsize">250</int> 
    </lst> 
    </fragmenter> 

    <!-- A regular-expression-based fragmenter 
     (for sentence extraction) 
    --> 
    <fragmenter name="regex" 
       class="solr.highlight.RegexFragmenter"> 
    <lst name="defaults"> 
     <!-- slightly smaller fragsizes work better because of slop --> 
     <int name="hl.fragsize">70</int> 
     <!-- allow 50% slop on fragment sizes --> 
     <float name="hl.regex.slop">0.5</float> 
     <!-- a basic sentence pattern --> 
     <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str> 
    </lst> 
    </fragmenter> 

    <!-- Configure the standard formatter --> 
    <formatter name="html" 
      default="true" 
      class="solr.highlight.HtmlFormatter"> 
    <lst name="defaults"> 
     <str name="hl.simple.pre"><![CDATA[<b class="highlite">]]></str> 
     <str name="hl.simple.post"><![CDATA[</b>]]></str> 
    </lst> 
    </formatter> 

    <!-- Configure the standard encoder --> 
    <encoder name="html" 
      class="solr.highlight.HtmlEncoder" /> 

    <!-- Configure the standard fragListBuilder --> 
    <fragListBuilder name="simple" 
        default="true" 
        class="solr.highlight.SimpleFragListBuilder"/> 

    <!-- Configure the single fragListBuilder --> 
    <fragListBuilder name="single" 
        class="solr.highlight.SingleFragListBuilder"/> 

    <!-- default tag FragmentsBuilder --> 
    <fragmentsBuilder name="default" 
        default="true" 
        class="solr.highlight.ScoreOrderFragmentsBuilder"> 
    <!-- 
    <lst name="defaults"> 
     <str name="hl.multiValuedSeparatorChar">/</str> 
    </lst> 
    --> 
    </fragmentsBuilder> 
</highlighting> 

Cập nhật schema:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <!-- <tokenizer class="solr.WhitespaceTokenizerFactory"/> --> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <!-- Case insensitive stop word removal. 
     add enablePositionIncrements=true in both the index and query 
     analyzers to leave a 'gap' for more accurate phrase queries. 
    --> 
    <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"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
    <!-- <tokenizer class="solr.WhitespaceTokenizerFactory"/> --> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <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"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

Fields

<fields> 
..... 
<field name="tease" type="text" indexed="false" stored="true" /> 
<field name="text" type="text" indexed="false" stored="true" /> 
<field name="fulltext" type="text" indexed="true" stored="false" multiValued="true"/> 
</fields> 

<copyField source="text" dest="fulltext"/> 
<copyField source="title" dest="fulltext"/> 
<copyField source="tease" dest="fulltext"/> 
<defaultSearchField>fulltext</defaultSearchField> 
+0

bạn có thể vui lòng thêm truy vấn mà bạn đang sử dụng cũng như làm nổi bật cài đặt từ tệp solconfig.xml của bạn? –

+0

Đó là một cái gì đó trên kết thúc tokenizing, bởi vì nếu tôi tìm kiếm trong giao diện điều khiển quản trị và nhìn vào nội dung được lập chỉ mục, các không gian thêm hiển thị ở đó. Tôi đã nghĩ rằng đây sẽ là một câu hỏi phổ biến, và sẽ là vấn đề kích hoạt hoặc vô hiệu hóa một cái gì đó trong logic tokenizing. Nhưng tôi không thể nói điều này là gì. –

Trả lời

5

Hãy thử sử dụng UAX29URLEmailTokenizerFactory tokenizer, giống như trình mã thông báo chuẩn nhưng có thể nhận ra địa chỉ email, URL, tên miền và địa chỉ IPv4/IPv6. Một ví dụ từ Reference Guide Solr:

Trong: Visit http://accarol.com/contact.htm?from=external&a=10 or e-mail [email protected]

Out: Visit, http://accarol.com/contact.htm?from=external&a=10, or, email, [email protected]

+0

nghe có vẻ đầy hứa hẹn, nhưng chưa. Tôi cập nhật lược đồ (ở trên) loại bỏ tokenizer trước đó, thêm này, khởi động lại SOLR, reindexed, và cam kết, nhưng tôi vẫn nhận được kết quả tương tự - không gian sau các khoảng thời gian trong email và url. –

+0

Có thể [WordDelimiterFilterFactory] (http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory) là điều gây rắc rối (nó chia mã thông báo thành các phần phụ). Bạn có thể thử vô hiệu hóa nó (hoặc có thể thiết lập 'preserveOriginal =" 1 "')? – Chewie

+0

Đã thử cả hai "preserveOriginal = 1" và tắt hoàn toàn, đồng thời nhận được kết quả tương tự. –

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