是否有方法查找与查询匹配但查询没有特定值的文档。
例如,我有索引 person
使用Map:
{
"properties": {
"fullname": {
"type": "text"
},
"email": {
"type": "keyword"
}
}
}
我有一个问题想找到类似的人:
{
"query": {
"bool": {
"must": [
{
"match": {
"fullname": "Foo Bar"
}
},
{
"term": {
"email": "foobar@gmail.com"
}
}
]
}
}
}
它可以为特定的人找到相似的人。
有没有一种方法可以让所有相似的人在索引中互相联系?也许是某种聚合?当出现新的类似文档时,设置警报可能会有所帮助。
1条答案
按热度按时间v8wbuo2f1#
首先,定义什么是相似的是任意的——但是您可能需要研究模糊匹配查询。
其次,当您使用
term
在keyword
字段中,您的结果将仅限于精确匹配--这在一定程度上违背了相似人员的目的。最后,聚合操作的是具体的值,所以一旦你发现你的相似的人使用
match
查询时,您可以通过多种方式进行聚合,但您已经“丢失”了模糊性方面,这是正确的。旁注:当您打算在文本字段上聚合时,如
fullname
,您可以设置fielddata: true
或者用keyword
像这样Map:具体来说,那么,在
term
查询时,我们可以进行以下操作:这个
by_email
聚合为我们提供与匹配查询的人员相关联的前10封电子邮件,按这些电子邮件的出现次数排序。我怀疑这不会有帮助,因为电子邮件。。。唯一;)这个
by_name
聚合更有用——可能有很多人被称为“foobar”,子聚合也被称为by_email
会给你他们的电子邮件。提醒是一个完全不同的主题——请随意问另一个问题。