如何运行一个弹性搜索查询,该查询仅返回文档中至少Y次提到的术语X的结果?
例如,假设您在所有索引文档中都有一个页脚,例如copyright 2013
。假设当用户搜索术语copyright
时,您希望变得聪明并且只显示那些单词copyright
两次的文档(否则您将返回所有文档)。我知道有多种方法可以实现这一点,但一种方法是运行一个过滤器,只返回那些使用术语版权两次的文档。这样的过滤器是否存在?
我可以想象这样的东西,但我在文档中看不到任何可比的东西:
"filter" : {
"term" : { "user" : "copyright"},
"frequency" : { "gt" : 1 }
}
考虑到Elasticsearch存储术语频率,我希望这可以实现。
答案 0 :(得分:3)
使用copyright
中的user
_index['user']['copyright'].tf()
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_index['name'][term_to_lookup].tf() > occurrences",
"params": {
"term_to_lookup": "copyright",
"occurrences": 1
}
}
}
}
}
}
{{1}} {{1}} {{1}}
{{1}}