自然语言搜索 - solr

时间:2016-07-14 07:59:48

标签: php search solr

我正在尝试使用solr search

搜索具有以下格式的过滤器的产品
  

三星手机低于10000

名称和价格是单独的字段。 预期结果是显示低于10000卢比价格的所有三星手机。

但现在搜索结果仅基于名称字段。是否可以通过单个查询考虑所有字段来执行此搜索?

我的查询:

http://localhost:8983/solr/myproducts/select?indent=on&q=memory card below 1000&rows=100&wt=json

我的data-config.xml是:

     <entity name="master_products"  
    pk="id"
    query="select p.* ,b.* ,c.* from master_products p ,master_brands b,master_product_categories c  where b.id=p.brand_id and c.id=p.product_category_id"
    deltaImportQuery="SELECT * FROM master_products WHERE product_name='${dataimporter.delta.product_name}' "
    >
    <!-- or b.brnad='${dataimporter.delta.brand}' -->

     <field column="product_name" name="name"/> 
     <field column="product_description" name="description"/> 
     <field column="id" name="id"/>
     <field column="mrp" name="mrp"/> 
     <field column="brand_id" name="brandID"/>


  <entity name="master_brands" 
    query="select * from master_brands"
    deltaImportQuery="select * from master_brands where id ={master_products.brand_id}" processor="SqlEntityProcessor" cacheImpl="SortedMapBackedCache" >
    <field column="brand" name="brand" />
  </entity>

  <entity name="master_product_categories" 
    query="select * from master_product_categories"
    deltaImportQuery="select * from master_product_categories where id ={master_products.   product_category_id}" processor="SqlEntityProcessor" cacheImpl="SortedMapBackedCache" >
    <field column="category" name="category" />
  </entity>

 </entity>  

1 个答案:

答案 0 :(得分:0)

实现您所要求的内容的方法很少。如果您想保持简单并且对查询解析器没有限制,那么您可以通过以下方式使用eDismax查询解析器:

http://localhost:8983/solr/myproducts/select?indent=on&q=memory card below 1000&defType=edismax&qf=name description&rows=100&wt=json

QF:

  

qf(查询字段)参数

     

qf参数引入了一个字段列表,每个字段都是   分配了一个提升因子来增加或减少该特定因素   字段在查询中的重要性。例如,下面的查询:

     

qf =“fieldOne ^ 2.3 fieldTwo fieldThree ^ 0.4”

     

指定fieldOne增加2.3,将fieldTwo保留为默认值   提升(因为没有指定提升因子),而fieldThree提升   0.4。这些提升因素使得fieldOne中的匹配更多   比fieldTwo中的匹配更重要,而后者则更多   比fieldThree中的匹配重要。

如果你还需要过滤低于1000的结果,你的问题还不清楚,万一你需要它让我知道,我会编辑答案,为查询添加相关的过滤器。