Tôi đã xem qua rất nhiều ví dụ và các câu hỏi khác ở đây và từ họ, tôi đã có cấu hình của tôi rất gần với những gì tôi cần nhưng tôi thiếu một chút cuối cùng mà tôi đang có một heck của một thời gian tập thể dục. Tôi đang tìm kiếm trên các giá trị như:Làm thế nào để có tự động hoàn thành Solr trên toàn bộ cụm từ khi truy vấn chứa nhiều cụm từ?
solar powered
solar glass
solar globe
solar lights
solar magic
solid brass
solid copper
Những gì tôi muốn:
- Nếu tôi tìm kiếm
sol
kết quả nên bao gồm tất cả các giá trị. Những công việc này. - Nếu tôi tìm kiếm
solar
Tôi sẽ chỉ nhận được năm người đầu tiên. Những công việc này. - Nếu tôi tìm kiếm
solar gl
Tôi chỉ nhận đượcsolar glass
vàsolar globe
. Điều này không hoạt động. Thay vào đó, tôi nhận được một bộ kết quả phù hợp chosolar
và một bộ kết quả phù hợp thứ hai chogl
.
Tóm lại, tôi muốn xem xét chuỗi đầu vào nói chung, bất kể khoảng trắng nào. Tôi thu thập điều này được thực hiện bằng cách tạo một phân tích truy vấn riêng biệt (so với chỉ số), nhưng tôi đã không thể làm cho nó hoạt động được. Bất cứ ai có thể đề nghị một cấu hình mà sẽ cho tôi những gì tôi đang tìm kiếm?
tôi (không thành công) đã cố gắng:
- Truy vấn với
"solar gl"
- Truy vấn với
mm=100%
- Xác định truy vấn và phân tích chỉ số riêng biệt cả hai sử dụng KeywordTokenizerFactory. (Dunno những gì tôi nghĩ rằng sẽ làm.)
- Xác định một bộ phân tích chỉ mục nhưng không phải là một bộ phân tích truy vấn.
- Xác định trình phân tích truy vấn không có trình thông báo.
Dưới đây là sơ đồ của tôi hiện tại:
<field name="suggest_phrase" type="suggest_phrase"
indexed="true" stored="false" multiValued="false" />
Và định nghĩa lĩnh vực:
<fieldType name="suggest_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
Và cấu hình:
<searchComponent name="suggest_phrase" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">suggest_phrase</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookup</str>
<str name="field">suggest_phrase</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest_phrase">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest_phrase</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">false</str>
</lst>
<arr name="components">
<str>suggest_phrase</str>
</arr>
</requestHandler>
Bạn đã thử giải pháp của tôi không? –
Thêm bộ lọc 'shingle' vào loại trường của bạn [Shingles Filter fieldType] (http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ShingleFilterFactory). – h4k1m
@ h4kim Ok, chỉ cần thử điều này nhưng nó không cho tôi những gì tôi đang tìm kiếm. Nếu tôi truy vấn 'green coffee', tôi vẫn lấy lại hai bộ đối sánh, một cho từ' green' và một từ riêng biệt cho từ 'coffee'. Những gì tôi đang tìm kiếm là để có được một danh sách chỉ các tài liệu có chứa chuỗi chính xác 'green coffee' và không phải là' "green" OR "coffee" ' . –