2013-07-02 22 views
5

Tôi không thể truy xuất các thuật ngữ được gạch nối trong kết quả tìm kiếm SOLR của tôi. Ví dụ khi tôi cố gắng thực hiện tìm kiếm như: siêu nhân, siêu người, v.v., tôi sẽ thấy các tiêu đề như siêu người đàn ông, siêu người đàn ông 3, v.v. trong kết quả tìm kiếm của tôi.Solr: Tìm kiếm các thuật ngữ được gạch nối cho 0 kết quả

Các FieldType là như sau:

<fieldType name="autocomplete_edge" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="^(.{30})(.*)?" replacement="$1" replace="all" /> 
    </analyzer> 
</fieldType> 

Xin vui lòng giúp.

Kính trọng

+0

bạn có thể vui lòng đăng loại trường theo định dạng dễ đọc hơn không? – Jayendra

+0

Xin chào, câu hỏi ban đầu được chỉnh sửa để có nội dung ở định dạng dễ đọc hơn.Cụm từ tìm kiếm như siêu, siêu, siêu người đàn ông, siêu nhân trả lại tên sách mong muốn. Trường hợp thất bại là: siêu người đưa ra 0 kết quả –

Trả lời

2

Tôi khuyên bạn nên sử dụng WordDelimiterFilterFactory cho trường hợp sử dụng của mình.

WordDelimiterFilterFactory sẽ cho phép bạn tạo mã thông báo có thể chia thành các ký tự đặc biệt và số cũng như duy trì Gốc để khớp với cụm từ tìm kiếm.

ví dụ:
generateWordParts sẽ chuyển đổi super-man ->super, man
splitOnNumerics sẽ tạo ra siêu man3 ->super, man, 3
catenateWords sẽ chuyển đổi super-man ->superman
catenateAll sẽ chuyển đổi super-man3 ->superman3

Vì vậy, đây sẽ cung cấp cho bạn khả năng phù hợp với sự kết hợp của cùng một từ

0

Giả sử bạn là tokeni zing dấu gạch ngang của bạn ok (xem WordDelimiterFilterFactory như đã đề cập trong câu trả lời dưới đây) thì trường mặc định của bạn (df) trong tệp cấu hình solr của bạn hoặc được chuyển thành tham số (& df = xxxx) giống như trường bạn đang khai báo?

Say lĩnh vực mặc định của bạn là: văn bản và lĩnh vực được lập chỉ mục của bạn là: tên

Nếu chúng ta truy vấn cho siêu người đàn ông

name:super man 

Truy vấn thực tế là:

parsedquery_toString: "+name:super +text:man" 

nào thắng không phù hợp. Nếu bạn truy vấn cho siêu người đàn ông trong dấu ngoặc kép:

name:"super man" 

cần làm việc tốt nhưng ít linh hoạt:

parsedquery_toString: "name:\"super man\"", 

nếu bạn thiết lập df của bạn để đặt tên (ví dụ phù hợp với lĩnh vực lập chỉ mục) nó mang lại:

parsedquery_toString: "+name:super +name:man" 

hoặc bạn có thể trực tiếp truy vấn

name:super name:man 

Lưu ý nếu bạn đang sử dụng tháo dỡ, bạn có thể cần phải nhìn vào trường mm nếu bạn vẫn không khớp.

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