2011-10-08 18 views
7

Tôi đang tìm kiếm một từ bằng cách sử dụng Solr, nhưng tôi không thể làm cho nó hoạt động.Tìm kiếm các từ một phần bằng cách sử dụng Solr

Tôi đang sử dụng tính năng này trong tệp schema.xml của mình.

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/> 
    </analyzer> 
</fieldType> 

Tìm kiếm die h sẽ không hoạt động, nhưng die hard trả về một số kết quả. Tôi đã reindexed cơ sở dữ liệu sau khi cấu hình trên đã được thêm vào.

Here là url và đầu ra khi tìm kiếm die hard. Trình gỡ lỗi được bật.

Here là url và đầu ra khi tìm kiếm die h. Trình gỡ lỗi được bật.

Tôi đang sử dụng Solr 3.3. Here là phần còn lại của tệp schema.xml.

+0

Tôi đã giải quyết vấn đề này. đi đến: http://stackoverflow.com/questions/4824954/solr-partial-and-full-string-match/8247013#8247013 – wormhit

Trả lời

6

Truy vấn bạn đã chia sẻ đang tìm kiếm trường "title_text", nhưng lược đồ bạn đã đăng ở trên xác định trường "văn bản". Giả sử đây chỉ là một sự giám sát và trường title_text được định nghĩa như trong bài viết của bạn, tôi nghĩ rằng một vấn đề có thể xảy ra là NGramTokenizer được cấu hình với minGramSize = "3" và bạn đang mong đợi để khớp với một mã thông báo đơn.

Bạn có thể thử thay đổi minGramSize thành 1, nhưng điều này chắc chắn sẽ dẫn đến một số chỉ số rất kém hiệu quả; và tôi tự hỏi liệu bạn có thực sự muốn có "e" phù hợp với mọi bộ phim với một e trong tiêu đề không?

+0

Có thể xác định 'NGramTokenizerFactory' cho tất cả các chỉ mục, không chỉ cho' text'? Tôi đã thử tìm kiếm bộ phim 'The Dancing Masters' bằng cách sử dụng' Danci', nó đã hoạt động. Nhưng nó không hoạt động để tìm kiếm 'Danc', bất kỳ ý tưởng nào tại sao? Không nên đặt giới hạn 'NGramTokenizerFactory' thành 3? – Oleander

+0

Phân tích (tokenizers, vv) được định nghĩa cho mỗi trường trong Solr. Nếu bạn muốn lập chỉ mục tất cả văn bản trong tất cả các trường cùng một lúc, bạn có thể xác định một copyField tự động thực hiện điều đó. Tôi nghi ngờ trận đấu "Danci" là do tokenization chứ không phải NGram. Nếu bạn lộn xộn trong công cụ quản trị nơi bạn có thể thấy kết quả phân tích, bạn sẽ có thể biết được. –

+0

Sử dụng copyField hoạt động tốt. [Ở đây] (https://gist.github.com/1272526) là kết quả. Bạn có cơ hội nào biết được bất kỳ bộ lọc thần nào khác mà tôi có thể đưa vào tệp schema.xml của tôi không? – Oleander

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