身安不如心安,屋宽不如心宽 。

ElasticSearch中怎么对搜索结果集进行复杂的逻辑过滤?

Elasticsearch | 作者 xupengrun | 发布于2017年08月03日 | 阅读数:4924

我重新描述一下问题,查询的输入值格式为"123,124,111,266"查询分词时使用逗号","分词,对doc里面的某个字段进行过滤如:doc.content :"123,122&125,111",content字段里面也是按","分词,数据格式有单个数字和包含"&"的字符串,122&125这种格式数据的匹配要求是必须同时匹配到122和125才算,以此类推如果是122&125&133这种的话就比如同时匹配到122,125,133三个值才算匹配上,输入的查询值只有类似"123,124,111"这种形式的,不包含"&"符号,都是单数字格式,这种可以通过什么方式来解决过滤问题,就是例如我输入查询的值"123,124,111,266",需要匹配出来"123,333,222","123&124,234","123&124&111,126"这些doc都要匹配到,因为每个doc的过滤匹配规则都不一样?通过怎样的方式可以实现,自定义脚本?自定义插件??
已邀请:

zhangyufu - 学习使我快乐

赞同来自:

建议自己解析参数,&&用must匹配,|| 用should,!用should_not,拼接成自己bool语句,没试过,不知道是否符合产品需求

kennywu76 - Wood

赞同来自:

你文档里的content字段可以看作bool表达式, 实际上你想做的是索引查询条件,然后在输入一个文本的情况下,看哪些条件能match。 因此你可以使用percolate query来完成这个功能,参考:
https://www.elastic.co/guide/e ... .html
 
实现方法上,可以在索引content字段的同时,对其内容做解析,生成es query,并索引到一个叫做content.query的字段,类型是percolator。 查询的时候用percolator,显示结果用content即可。

shellmeng

赞同来自:

把122&125 拼一个must query,嵌套在之前的should query中应该就行吧?

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

正则方式可以吗?试试看

xupengrun - 90后

赞同来自:

谢谢大家,最后采用写个自定义插件的方式解决了.遇到同样问题的同学看这个博客
http://www.jianshu.com/p/a0a168585e3d

xinfanwang

赞同来自:

结果集过滤用script吧。

要回复问题请先登录注册