2010-01-22 30 views
16

Tôi có hai trường bảng trong bảng MySQL. Một là VARCHAR và là "dòng tiêu đề" cho một trang web rao vặt (rao vặt). Trường còn lại là trường văn bản có chứa "văn bản" cho phân loại.Làm cách nào để xác định loại trường cho lập chỉ mục SOLR?

Hai câu hỏi:
Làm thế nào nên tôi xác định làm thế nào để chỉ số hai lĩnh vực này? (loại trường nào, lớp nào cần sử dụng, v.v.)

Hiện tại tôi có một "ad_id" làm mã định danh duy nhất cho mỗi quảng cáo, ví dụ "bmw_m3_82398292". Làm cách nào để tôi có thể làm cho SOLR trả về số nhận dạng này mỗi khi tìm thấy 'kết quả truy vấn' bằng SOLR? (Phần đầu của bộ nhận diện thực sự là các lĩnh vực tiêu đề nội dung, phần thứ hai là một số ngẫu nhiên chọn)

Cảm ơn

Trả lời

29

1. Schema

schema Solr của bạn là rất nhiều quyết tâm theo hành vi tìm kiếm dự định của bạn. Trong tệp schema.xml của bạn, bạn sẽ thấy một loạt các lựa chọn như "văn bản" và "chuỗi". Họ cư xử khác nhau.

<fieldtype name="string" class="solr.StrField" sortMissingLast="true"  omitNorms="true"/> 

Loại trường chuỗi là kết quả chuỗi chữ. Nó sẽ hoạt động như == trong một câu lệnh SQL.

<fieldtype name="text_ws" class="solr.TextField"   positionIncrementGap="100"> 
    <analyzer> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    </analyzer> 
</fieldtype> 

Loại trường text_ws không mã thông báo. Tuy nhiên, một sự khác biệt lớn trong trường text là các bộ lọc cho các từ dừng và dấu phân tách và lớp vỏ dưới. Lưu ý cách các bộ lọc này được chỉ định cho cả chỉ mục Lucene và truy vấn Solr. Vì vậy, khi tìm kiếm một trường văn bản, nó sẽ điều chỉnh các cụm từ truy vấn bằng cách sử dụng các bộ lọc này để giúp tìm một kết quả phù hợp.

<fieldtype name="text"  class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter ..... /> 
    <filter ..... /> 
    <filter ..... /> 
    </analyzer> 
</fieldtype> 

Khi lập chỉ mục những thứ như câu chuyện tin tức, bạn có thể muốn tìm kiếm tên công ty và tiêu đề khác nhau.

<field name="headline" type="text" /> 
<field name="coname" type="string" indexed="true" multiValued="false" omitNorms="true" /> 

Ví dụ trên sẽ cho phép bạn thực hiện tìm kiếm như &coname:Intel&headline:processor+specifications và truy xuất các kết quả phù hợp với chính xác câu chuyện của Intel.

Nếu bạn muốn tìm kiếm một loạt

2. Fields quả

Bạn có thể định nghĩa một bộ tiêu chuẩn ruộng trở lại trong bạn RequestHandler

<requestHandler name="mumble" class="solr.DisMaxRequestHandler" > 
    <str name="fl"> 
     category,coname,headline 
    </str> 
</requestHandler> 

Bạn cũng có thể xác định mong muốn các trường trong chuỗi truy vấn của bạn, sử dụng thông số fl .:

/select?indent=on&version=2.2&q=coname%3AIn*&start=0&rows=10&fl=coname%2Cid&qt=standard 

Bạn cũng có thể select ranges trong cụm từ truy vấn của mình bằng cách sử dụng cú pháp field:[x TO *].Nếu bạn muốn chọn một số quảng cáo nhất định theo ngày của chúng, bạn có thể tạo truy vấn với

ad_date:[20100101 TO 20100201] 

trong cụm từ truy vấn của bạn. (Có rất nhiều cách để tìm kiếm dãy, tôi trình bày phương pháp sử dụng số nguyên thay vì Lớp ngày).

+0

Bạn có biết tôi có thể tìm thấy "tài liệu tham khảo" ở tất cả các loại và thuộc tính cho các kiểu trường này không? –

+1

Tôi thường bắt đầu trên trang wiki http://wiki.apache.org/solr/ và Javadocs cho các lớp học được đặt tại đây: http://lucene.apache.org/solr/api/index.html. –

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