2010-05-06 30 views
5

Tôi đang cố gắng tìm kiếm các kết quả bắt đầu một phần trên một danh sách lớn các họ. Vì vậy, Wein * nên tìm Weinberg, Weinkamm, vvLàm thế nào để thực hiện các trận đấu bắt đầu một phần trong Solr?

tôi có thể làm điều này bằng cách tạo ra một lĩnh vực đặc biệt, và thêm

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

để đặc tả kiểu của nó trong schema.xml. Khi tôi thêm dòng trên chỉ để phân tích chỉ mục và để trống nó cho trình phân tích truy vấn, tôi có thể tìm kiếm bằng cách chỉ tìm kiếm special_field: Wein và nhận kết quả mong đợi.

Bây giờ tôi thấy rằng solr cũng có * -syntax. Mối liên hệ giữa EdgeNGramFilterFactory và * -syntax là gì?

Tôi có làm đúng hay có cách nào tốt hơn, thường xuyên hơn không?

Cảm ơn!

Trả lời

1

Tôi không đề xuất truy vấn Wein *. Điều đó được thực hiện bên trong như PrefixQuery, nó viết lại truy vấn ban đầu để bao gồm tất cả các từ có tiền tố bằng "Wein". Tùy thuộc vào mức độ lớn của chỉ mục của bạn (ý tôi là bao nhiêu cụm từ), việc ghi lại truy vấn này có thể là một nút cổ chai.

EdgeNGramFilter tại thời gian chỉ mục là cách tiếp cận tốt hơn. Giải pháp này sẽ sử dụng nhiều không gian hơn, nhưng các truy vấn sẽ được xử lý nhanh hơn nhiều.

+0

Cảm ơn. Tôi không mong đợi nhiều thuật ngữ truy vấn, vì vậy tôi đã đi với cú pháp ký tự đại diện và khá hài lòng với nó. – CruftyCraft

+0

Tôi đề cập đến số lượng cụm từ chỉ mục, không phải là cụm từ truy vấn. Solr/Lucene thực hiện tìm kiếm tuyến tính trên tất cả các thuật ngữ được lập chỉ mục để chọn một tập con các thuật ngữ có cùng tiền tố. Khi tập hợp con được chọn, truy vấn được mở rộng để bao gồm các cụm từ đó. Vì vậy, nút cổ chai là tìm kiếm tuyến tính. Sau đó, tôi vẫn đề nghị EdgeNGramFilter, trừ khi bạn nói rằng bạn có vài thuật ngữ trong chỉ mục của bạn. – Rodes

+0

Tôi hiểu. Tôi có thể thực hiện các thay đổi tương tự theo hướng này khi chúng tôi đạt đến giới hạn hiệu suất. Cảm ơn. – CruftyCraft

3

Hoặc chỉ cần làm một hoang dã trận đấu thẻ đơn giản:

name:Pe* 
Các vấn đề liên quan