2012-10-11 23 views
16

schema.xml đoạn mã:Solr - Query trên mọi lĩnh vực thực hành tốt nhất

<field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="notes" type="text_general" indexed="true" stored="true"/> 
    <field name="missionFocus" type="text_general" indexed="true" stored="true"/> 
    <field name="name" type="text_general" indexed="true" stored="true"/> 
    <field name="first_name" type="text_general" indexed="true" stored="true"/> 
    <field name="last_name" type="text_general" indexed="true" stored="true"/> 
    <field name="about_me" type="text_general" indexed="true" stored="true"/> 
    <field name="message" type="text_general" indexed="true" stored="true"/> 
    <field name="title" type="text_general" indexed="true" stored="true"/> 
    <field name="table_type" type="string" indexed="true" stored="true"/> 

    <field name="text" type="text_general" indexed="true" stored="false" 
      multiValued="true"/> 

Bây giờ tôi muốn tìm kiếm trong tất cả các lĩnh vực (trừ "id" và "TABLE_TYPE") cho ví dụ "xin chào". Làm thế nào tôi có thể làm điều này? Tôi có thực sự phải viết sau đây không?

/solr/select/?q=notes:hello missionFocus:hello name:hello first_name:hello .. 

Tôi đã nghe điều gì đó về DisMaxRequestHandler nhưng làm cách nào tôi phải truy vấn bằng trình xử lý này? Tôi có cần phải thay đổi một cái gì đó trong solrconfig.xml cho điều đó không?

Trả lời

21

Giải pháp tốt nhất là xây dựng một trường, thu thập dữ liệu của tất cả các lĩnh vực như thế này

<field 
    name="collector" 
    type="text_general" 
    indexed="true" 
    stored="false" 
    multiValued="true" 
/> 

Điều duy nhất bạn phải làm bây giờ là, sao chép nội dung của tất cả các lĩnh vực với lĩnh vực này:

<copyField source="notes"  dest="collector"/> 
<copyField source="missionFocus" dest="collector"/> 
<copyField source="name"   dest="collector"/> 
.... 

Hãy nhận biết rằng khối copyField phải được xác định DƯỚI này:

<fields> 
.... 
</fields> 

Bây giờ bạn chỉ có thể tìm kiếm trên trường collector và bạn sẽ tìm thấy bất kỳ văn bản nào trong bất kỳ trường nào của bạn.

+0

Tôi nghĩ rằng tôi đã xác định trường "bộ sưu tập" có tên là "văn bản"? :) Vâng, tôi vừa sao chép nó từ ví dụ schema.xml. – user1731299

+0

Đúng vậy: "văn bản" là trường tương đương trong dự án ví dụ solr ;-) – heinob

+0

phải làm gì nếu tôi muốn tinh chỉnh điểm dựa trên trường nào khớp? – faridasabry

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