我有一个ElasticSearch索引,里面有很多文档。数据模型大约有20个字段;其中有5个,如果它们相同,会让我得出结论,该文件是重复的。基本上,我想在所有5个字段中对具有相同值的文档进行分组,并在每个结果桶中返回文档(而不仅仅是聚合值)。
ElasticSearch可以这样做吗?
答案 0 :(得分:1)
所以简短的回答是肯定的,elasticsearch绝对可以做到这一点,通过以下简短的例子可以看出:
{
"filtered": {
"query": {
// Your query goes here
}
},
"filter": {
"script": {
"script": "doc['field1'].value == doc['field2'].value == doc['field3'].value == doc['field4'].value"
}
}
}
}
我只尝试了2个字段,但我认为它应该比这更有用。
您基本上使用过滤器来删除这些字段彼此不相同的文档。希望这会有所帮助。
如果您想将documentA与documentB匹配,并查看其中5个字段是否相同,那么这将是一个不同的问题。
要解决这个问题,我的建议是编写一个脚本,一次获取一个文档,然后对您要查找的字段进行弹性搜索查询过滤,并查看是否有其他文档出现。如果他们这样做,删除它们并重复该过程。如果没有匹配,请移动下一个文档。如果没有其他文件需要检查,您就完成了。 (您可能希望保留文档计数器或文档名称列表以跟踪您何时完成)
这可能不是您正在寻找的干净的弹性搜索方法,可能有更好的方法,但这是解决您的问题的一种方法。
答案 1 :(得分:1)