我正在尝试使用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>
答案 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的结果,你的问题还不清楚,万一你需要它让我知道,我会编辑答案,为查询添加相关的过滤器。