2013-08-14 34 views
5

Tôi đang thực hiện tìm kiếm SOLR. Khi tôi gõ vào ví dụ: Richard Chase tôi nhận được tất cả các Richards trong chỉ mục và tất cả các Chases, như Johnny Chase vv .. khi thực sự tôi chỉ muốn trả lại tất cả các tên phù hợp với cả Richard và Chase.Thực hiện khớp CHÍNH XÁC trên tìm kiếm SOLR

thiết lập cấu hình của tôi là

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

và truy vấn của tôi tìm kiếm lĩnh vực văn bản

văn bản: Richard Chase

bất kỳ ý tưởng những gì tôi đang làm sai?

+0

chỉ một điều nữa ... tìm kiếm cần khớp với các trường hợp, ví dụ: Richard John Chase hoặc Mr Richard Chase – fredseagul

Trả lời

9

Bạn đang sử dụng StandardTokenizerFactory, tuân thủ Word Boundary rules.

Điều này có nghĩa là các từ của bạn sẽ bị phân chia trên không gian.

nếu bạn muốn có một kết hợp chính xác thực, tức là

Richard Chase để trả lại tài liệu chỉ chứa Richard Chase chính xác, sau đó bạn nên bạn KeywordTokenizerFactory.

Nhưng khi bạn đề cập đến, bạn muốn Richard John Chase nhưng không Johnny Chase, nó nói với tôi rằng bạn muốn trận đấu cho Richard Chase.

Bạn có thể tìm kiếm Richard AND Chase hoặc thay đổi toán tử mặc định của mình theo số schema.xml thành AND thay vì OR. Hãy coi chừng cài đặt này là toàn cầu.

+0

vâng vâng - tôi sẽ chia cụm từ tìm kiếm và sau đó tạo truy vấn của tôi bằng cách sử dụng AND. cảm ơn! – fredseagul

2

Bạn phải sử dụng PhraseQuery (text:"Richard Chase") để nhận tài liệu ở đó cả hai RicahardChase ở gần nhau. Nếu bạn cũng muốn tìm, giả sử, Richard X. Chase bạn có thể sử dụng text:"richard chase"~1.

Xem http://www.solrtutorial.com/solr-query-syntax.html

0

Đối so khớp chính xác bạn có thể đặt mm (tối thiểu "Nên" Match) tham số của phân tích cú pháp truy vấn của bạn đến 100% trong solrconfig.xml bạn

<str name="mm">100%</str> 

này quy định mức tối thiểu số mệnh đề phải khớp trong truy vấn. Hoặc bạn có thể ghi đè thông số này (q.mm) tại thời điểm truy vấn theo yêu cầu

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