2009-12-29 21 views
22

Tôi đang sử dụng công cụ tìm kiếm Apache Solr cho lập chỉ mục cơ sở dữ liệu trang web của tôi ..Apache Solr tìm kiếm một phần của từ

Tôi đang sử dụng django + http://haystacksearch.org/

Vì vậy, chúng ta hãy nói rằng tôi có tài liệu có chữ "Gà "

Khi tôi tìm kiếm cho 'gà' - Solr có thể tìm thấy tài liệu

này Nhưng Khi tôi tìm kiếm 'gà' - nó không tìm thấy bất cứ điều gì ..

Có cách nào để sửa lỗi này không?

Trả lời

18

Lưu ý: Giải pháp sau đây là Solr 1.4 (và cao hơn) cụ thể!

Để linh hoạt hơn, tôi khuyên bạn nên lập chỉ mục dữ liệu của mình với số NGramTokenizerFactory để thực hiện tìm kiếm ký tự đại diện trước và sau đầy đủ. Nếu bạn chỉ muốn tìm kiếm các phần tử ở đầu hoặc cuối của chuỗi, hãy xem xét sử dụng EdgeNGramTokenizerFactory.

Dưới đây là một thả thay thế của các loại trường văn bản trong đó sẽ chứa nhu cầu của bạn:

<fieldType name="text" class="solr.TextField" > 
<analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
+0

solr 1.5 - là phiên bản phát triển này? (không được phát hành?) –

+1

là có giải pháp như thế này cho 1,4? –

+0

Tốt bắt: Tôi sửa câu trả lời để phản ánh 1.4 – Brian

7

Nếu bạn muốn tìm tất cả các từ bắt đầu bằng chick, hãy tìm kiếm gà *.

+0

Tôi không thể sử dụng \ * chick \ *? là nó có thể? –

+0

@soundar, Đó là gà ** xấu **;) Bạn không thể có * từ đầu của từ khóa tìm kiếm, Lucene không hỗ trợ điều đó. –

1

Một cách tiếp cận khác nhau, nếu bạn đang gặp rắc rối với một nhóm nhỏ các từ ngữ, sẽ được sử dụng Solr. SynonymFilterFactory

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

Bạn chỉ cần phải duy trì một tập tin văn bản đơn giản có chứa các từ đồng nghĩa:

chick peep chicken 
dawg hound dog 
moggie puss kitten cat 

Số nhiều sẽ tự chăm sóc với các bộ lọc khác.

4

Khi tôi đã sử dụng

<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 

để làm tìm kiếm ký tự đại diện từ câu trả lời của Brian, Solr thời gian lập chỉ mục tăng dramaticly. Trong hơn 20 lần! Quyết định khác của ký tự đại diện tìm kiếm vấn đề tôi thấy ở đây:

http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/

Bạn chỉ cần thêm bộ lọc

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 

(tokenizer mặc định - solr.WhitespaceTokenizerFactory trong khối chỉ số FieldType). Đối với tôi kết quả là như nhau với chi phí hệ thống ít hơn.

0

Tôi chưa thay đổi bất kỳ cấu hình nào. Tôi chỉ sử dụng dấu sao ở phía trước và ở phía sau searchString: * chicke * (không có khoảng trắng ở cuối -> đó là do từ định dạng SO là nghiêng nếu bạn sử dụng * ở đầu và cuối)

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