2015-10-20 20 views
7

Tôi đã định cấu hình solr 4.10 (cũng 5.3) với highlighting functionality. Nó hoạt động tốt với hầu hết các từ, tuy nhiên tôi tìm thấy một số từ "không" cho phép đánh dấu, nghĩa là, solr trả về các tài liệu bắt buộc, nhưng không làm nổi bật một số từ.Solr không làm nổi bật một số từ

Điều gì có thể gây ra hiệu ứng như vậy?

solrconfig.xml

<requestHandler name="/select" class="solr.SearchHandler"> 
<lst name="defaults"> 
    <str name="wt">json</str> 
    <str name="indent">true</str> 
    <str name="defType">edismax</str> 
    <str name="bf">product(concount)</str> 
    <str name="df">text bio text_syn text_syn_other</str> 
    <str name="qf"> 
    text^25 bio^16 text_syn^8 text_syn_other^3 
    </str> 
    <str name="hl">on</str> 
    <str name="hl.fl">text bio text_syn text_syn_other</str> 
    <str name="hl.preserveMulti">true</str> 
    <str name="hl.encoder">html</str> 
    <str name="f.text.hl.fragsize">100</str> 
    <str name="hl.snippets">20</str> 
    <arr name="components"> 
    <str>highlight</str> 
    </arr> 
</lst> 

schema.xml

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms_abbr.txt" ignoreCase="true" expand="false"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

<fieldType name="text_en_syn" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

<fieldType name="text_en_syn_other" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms_other.txt" ignoreCase="true" expand="false"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" /> 
<field name="text_syn" type="text_en_syn" indexed="true" stored="false" multiValued="true" /> 
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="false" multiValued="true" /> 

<field name="text_exact" type="string" indexed="true" stored="false" multiValued="false" /> 

<field name="bio" type="text_en" indexed="true" stored="true" multiValued="false" /> 

<field name="bio_exact" type="string" indexed="true" stored="false" multiValued="false" /> 

<field name="concount" type="long" indexed="true" stored="true" multiValued="false" /> 

<field name="concount_exact" type="long" indexed="true" stored="false" multiValued="false" /> 

<copyField source="text" dest="text_syn"/> 
<copyField source="bio" dest="text_syn"/> 
<copyField source="text" dest="text_syn_other"/> 
<copyField source="bio" dest="text_syn_other"/> 

Đối với truy vấn http://localhost:8983/solr/select?q=senior tôi có tài liệu có chứa từ senior, nhưng trong phần phản ứng Solr làm nổi bật từ đó là không được đánh dấu.


UPDATE 1: tôi tìm ra rằng tôi có từ senior trong tập tin synonyms_abbr.txt của tôi, dòng senior,lead. Khi tôi nhận xét rằng dòng hoặc thay thế các từ, lead,senior, đáng ngạc nhiên là từ senior bắt đầu làm nổi bật. Bất kỳ ý tưởng?


UPDATE 2: Words từ synonyms.txtsynonyms_other.txt đang nhận được nhấn mạnh bình thường, nhưng từ từ synonyms_abbr.txt cư xử lạ lùng như sau. Ví dụ, tôi có dòng lead,head,senior trong synonyms_abbr.txt sau đó

  • các truy vấn http://localhost:8983/solr/select?q=seniorhttp://localhost:8983/solr/select?q=head không đánh dấu bất kỳ văn bản,
  • truy vấn http://localhost:8983/solr/select?q=lead nổi bật không chỉ từ lead, mà còn headsenior.
+0

Vui lòng sử dụng chức năng phụ trợ của Solr để phân tích việc chuyển đổi từ. Tôi không chắc chắn về cách mà từ đó được biến đổi. Nó có thể là một vấn đề xuất phát. Nếu không, hãy sử dụng một trường khác, tắt các biến đổi chỉ để lại trình mã thông báo, sau đó thử làm nổi bật từ trường đó. – 0xCAFEBABE

+0

@Mher Những từ nào không được đánh dấu từ dừng? Hoặc chỉ ngẫu nhiên? –

+0

Tôi không có bất kỳ cấu hình từ dừng nào. Toàn bộ tệp 'stopwords.txt' được nhận xét. – Mher

Trả lời

2

Từ Update2 của bạn rõ ràng là chỉ có từ đầu tiên trong lead,head,senior được thực tế sử dụng đối sánh và đánh dấu từ đồng nghĩa.

Nếu bạn nhìn vào Documents trên SolrWiki https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters có một đề cập đến expand=true có một ảnh hưởng nhất định

Các từ đồng nghĩa tên tham số một tập tin bên ngoài xác định từ đồng nghĩa. Nếu ignoreCase là true, kết hợp sẽ viết thường trước khi kiểm tra tính bình đẳng. Nếu mở rộng là đúng, từ đồng nghĩa sẽ được mở rộng đến tất cả các từ đồng nghĩa tương đương. Nếu nó sai, tất cả các từ đồng nghĩa tương đương sẽ được giảm xuống từ đầu tiên trong danh sách.

Trang web này cũng trình bày và ví dụ

# If expand==true, "ipod, i-pod, i pod" is equivalent to the explicit mapping: 
ipod, i-pod, i pod => ipod, i-pod, i pod 
# If expand==false, "ipod, i-pod, i pod" is equivalent to the explicit mapping: 
ipod, i-pod, i pod => ipod 

này có vẻ là phù hợp với hành vi mà bạn đang quan sát. Điều này ngụ ý rằng bạn nên thay đổi định nghĩa bộ lọc Đồng nghĩa trong schema.xml để sử dụng expand = true HOẶC thay đổi cách tệp từ đồng nghĩa của bạn xác định bộ lọc để sử dụng ánh xạ rõ ràng.

Ngoài ra, khi Máy phân tích hoạt động tại thời điểm lập chỉ mục, bạn có thể phải kết nối lại tài liệu để thao tác này hoạt động.

+0

cảm ơn lời giải thích, nó rất hữu ích, bạn có thể giải thích phần khác của câu hỏi: ví dụ, chúng ta có 'expand = true', tại sao khi tôi truy vấn từ đồng nghĩa từ tệp' synonyms_abbr.txt' rồi tất cả các từ đồng nghĩa của từ đó đều nhận được đánh dấu cũng như chính nó, tuy nhiên wehen chọn từ đồng nghĩa từ 'synonyms.txt' sau đó đánh dấu chỉ nhận từ đó, không phải từ đồng nghĩa của từ đó? – Mher

+0

Nhìn vào định nghĩa trường của bạn, có vẻ như các trường được liên kết với synonym.txt được định cấu hình với store = false. Do đó làm nổi bật sẽ không hoạt động. Xem câu trả lời khác cho câu hỏi này từ ilinca – vvs

2

Một số trường không được lưu trữ do đó không thể được trả lại. Vì chúng được lập chỉ mục, chúng có thể tìm kiếm được. Thay đổi lược đồ của bạn thành đã lưu trữ = "true" cho tất cả các trường bạn muốn đánh dấu.

<field name="text_syn" type="text_en_syn" indexed="true" stored="true" multiValued="true" /> 
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="true" multiValued="true" /> 

Bằng cách xem cấu hình của bạn, tôi cho rằng tô sáng hoạt động trên trường và văn bản?

+0

không @ linca, làm nổi bật không chỉ hoạt động trên các trường sinh học và văn bản. Tôi không xem xét các hồ sơ chưa được lưu trữ. – Mher

+0

Ồ, xin lỗi. Dòng văn bản sinh học text_syn text_syn_other khiến tôi nghĩ bạn cũng muốn đánh dấu trên 2 trường chưa được lưu trữ. Tôi nghĩ rằng chúng ta sẽ cần một ví dụ về các giá trị của các trường, truy vấn, kết quả. – ilinca

0

bạn có thể cố gắng thêm cao cấp, chì và chì, cao cấp đến tập tin synonyms_abbr.txt và sau đó cố gắng chạy highlighter

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