2011-09-21 36 views
6

Tôi đang sử dụng SOLR 3.2. Ứng dụng của tôi đưa ra các truy vấn tìm kiếm trên cá thể SOLR, cho một kiểu trường văn bản. Làm thế nào tôi có thể làm cho SOLR trả về các kết quả như "book", "bookshelf", "bookasd" như vậy, khi người dùng đưa ra một truy vấn như "book". Tôi có nên thêm các ký tự "*" vào chuỗi truy vấn theo cách thủ công hay có cài đặt trong SOLR để nó sẽ thực hiện tìm kiếm tiền tố trên trường theo mặc định?Cách định cấu hình SOLR để người dùng có thể thực hiện tìm kiếm tiền tố theo mặc định?

Đây là phần schema.xml cho loại hình trường văn bản:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="1" splitOnCaseChange="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
     </analyzer> 
     <analyzer type="query"> 
     <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenat0All="1" splitOnCaseChange="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
     </analyzer> 
    </fieldType> 
+0

Bạn đã tìm thấy câu trả lời chưa? –

Trả lời

0

Bạn có thể sẽ phải làm việc xử lý trên các mặt hàng bằng cách thêm các ký tự đại diện vào cuối các thuật ngữ tìm kiếm.

Tác động: -

  1. truy vấn Wildcard có tác động hiệu suất
  2. truy vấn Wildcard không trải qua phân tích. Vì vậy, phân tích thời gian truy vấn sẽ không được áp dụng cho các cụm từ tìm kiếm của bạn

Tùy chọn khác là triển khai trình phân tích truy vấn tùy chỉnh với việc xử lý bạn cần.

1

Tôi có cùng yêu cầu đối với dự án. Tôi đã phải thực hiện Đề xuất. Những gì tôi đã làm là xác định trường suggester này Loại

<fieldType class="solr.TextField" name="suggester"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 

     <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="3" outputUnigrams="true" outputUnigramsIfNoShingles="false" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true" /> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Tôi đã sử dụng ShingleFilterFactory vì tôi cần đề xuất bao gồm thêm một từ quặng.

Sau đó, tôi đã sử dụng truy vấn cạnh tranh để nhận đề xuất.

Facet.Limit = 10

Facet.Prefix = "cuốn sách"

Facet.Field = "Suggester" // đây là lĩnh vực với fieldType = "suggester" trong đó tôi đã lưu dữ liệu

Tôi biết nó sử dụng kết quả khía cạnh nhưng có thể giải quyết được vấn đề của bạn.

Nếu tôi hoặc Jayendra Patil's answer không cung cấp cho bạn một giải pháp bạn cũng có thể có một cái nhìn tại EdgeNGramFilterFactory

2

Có một số cách để làm điều này, nhưng hiệu suất khôn ngoan bạn có thể muốn sử dụng EdgeNgramFilterFacortory

0

tôi m chắc chắn bạn đã tìm ra điều này ngay bây giờ, nhưng chỉ để có câu trả lời ở đây:

Tôi đã xử lý điều này bằng cách đặt cụm từ cuối cùng và đặt OR bằng cụm từ cuối cùng cộng với ký tự đại diện, ví dụ: "cuốn sách yêu thích của tôi" trở thành "+ yêu thích của tôi + (sách HOẶC sách *)" và sẽ trả lại "giá sách yêu thích của tôi". Bạn có thể muốn làm một số xử lý trên đầu vào anyway (thoát, vv).

Nếu bạn đang tìm kiếm văn bản được nhập để phù hợp với kết quả, thì n-gram cạnh là cách để đi, nhưng từ đọc câu hỏi của bạn thì dường như bạn không thực sự yêu cầu điều đó.

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