2010-08-06 11 views
9

Tôi đang cố truy vấn Solr cho các mục nhập có giá trị nhất định trong một trường HOẶC không có giá trị cho trường. Giá trị trường phủ định hoạt động khi được sử dụng bởi chính nó nhưng làm cho truy vấn không trả lại kết quả khi kết hợp với bất kỳ kết quả nào khác. Dưới đây là một phản hồi với debugQuery được bật. Tập tin cấu hình tôi sử dụng có thể được tìm thấy here.Truy vấn Solr cho các mục có trường: giá trị hoặc không có giá trị cho trường tại tất cả

<?xml version="1.0"?> 
<response> 
    <responseHeader> 
    <status>0</status> 
    <QTime>3</QTime> 
    <lst name="params"> 
     <str name="facet">true</str> 
     <str name="sort">sort_title asc</str> 
     <str name="fl">id,nid,url,uid</str> 
     <str name="debugQuery">true</str> 
     <str name="facet.mincount">1</str> 
     <str name="facet.sort">true</str> 
     <str name="start">0</str> 
     <str name="bf">recip(rord(created),4.000000,239,239)^200.000000</str> 
     <arr name="fq"> 
     <str>NOT type:article</str> 
     <str>NOT type:insect</str> 
     <str>NOT type:news</str> 
     <str>NOT type:plant</str> 
     <str>im_cck_field_affected_plants:(20 OR -[* TO *])</str> 
     <str>entity:node</str> 
     </arr> 
     <str name="version">1.2</str> 
     <str name="rows">16</str> 
    </lst> 
    </responseHeader> 
    <result name="response" numFound="0" start="0"/> 
    <lst name="facet_counts"> 
    <lst name="facet_queries"/> 
    <lst name="facet_fields"/> 
    <lst name="facet_dates"/> 
    </lst> 
    <lst name="debug"> 
    <null name="rawquerystring"/> 
    <null name="querystring"/> 
    <str name="parsedquery">+MatchAllDocsQuery(*:*) FunctionQuery((239.0/(4.0*float(top(rord(created)))+239.0))^200.0)</str> 
    <str name="parsedquery_toString">+*:* (239.0/(4.0*float(top(rord(created)))+239.0))^200.0</str> 
    <lst name="explain"/> 
    <str name="QParser">DisMaxQParser</str> 
    <str name="altquerystring">org.apache.lucene.search.MatchAllDocsQuery:*:*</str> 
    <arr name="boostfuncs"> 
     <str>recip(rord(created),4.000000,239,239)^200.000000</str> 
    </arr> 
    <arr name="filter_queries"> 
     <str>NOT type:article</str> 
     <str>NOT type:insect</str> 
     <str>NOT type:news</str> 
     <str>NOT type:plant</str> 
     <str>im_cck_field_affected_plants:(20 OR -[* TO *])</str> 
     <str>entity:node</str> 
    </arr> 
    <arr name="parsed_filter_queries"> 
     <str>-type:article</str> 
     <str>-type:insect</str> 
     <str>-type:news</str> 
     <str>-type:plant</str> 
     <str>im_cck_field_affected_plants:20 -im_cck_field_affected_plants:[* TO *]</str> 
     <str>entity:node</str> 
    </arr> 
    <lst name="timing"> 
     <double name="time">3.0</double> 
     <lst name="prepare"> 
     <double name="time">3.0</double> 
     <lst name="org.apache.solr.handler.component.QueryComponent"> 
      <double name="time">2.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.FacetComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.HighlightComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.StatsComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.SpellCheckComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.DebugComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     </lst> 
     <lst name="process"> 
     <double name="time">0.0</double> 
     <lst name="org.apache.solr.handler.component.QueryComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.FacetComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.HighlightComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.StatsComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.SpellCheckComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.DebugComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     </lst> 
    </lst> 
    </lst> 
</response> 

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

15

Cuối cùng đã đặt câu hỏi đủ tốt để tìm câu trả lời thông qua Google.

http://osdir.com/ml/solr-user.lucene.apache.org/2009-03/msg00480.html

HAY KHÔNG truy vấn có thể được viết như sau, sử dụng trường hợp của tôi như một ví dụ:

im_cck_field_affected_plants:20 OR (*:* -im_cck_field_affected_plants:[* TO *]) 
+0

Đây là sự giúp đỡ lớn lao cho tôi - cảm ơn bạn. Bạn có thể nhớ những từ khóa bạn đã sử dụng trong Google để khám phá điều này không? –

+0

Upvoting. Cảm ơn bạn đã dành thời gian quay lại để trả lời câu hỏi của riêng bạn. – sbrattla