我是Elastic Search的新手。我的场景很复杂,无法为此找到正确的解决方案(弹性查询/参数)。任何帮助将不胜感激。
我的领域
除此以外,搜索始终将针对唯一用户进行过滤。所以Mysql查询看起来像:
Select * from product where product_name like %xxx% AND price >= price_min AND price <= price_max AND availability = availability_ status AND user = 1;
我喜欢精确的elasticsearch参数来解决这种情况,或者大约解决方案也将不胜感激。
您需要在此处使用过滤器,因为您需要完全匹配而不是全文匹配。而且这种方式甚至更快。
{ "query": { "filtered": { "query": { "match": { "name": "YourName" } }, "filter": { "bool": { "must": [ { "range": { "price_min": { "gte": 20 }}}, { "range": { "price_max": { "lte": 170 }}}, { "term" : { "availability" : "false" }} ] } } } } }
您在“您的姓名”中提供的是全文匹配项(如果对名称字段进行了分析,则将检索相似的名称)。我假设您保持不变,因此默认情况下会分析该字段(词干+停用词删除)。由于您需要结果来匹配所有条件,因此必须使用AND组合。因此使用
bool过滤所有AND项。