Van*_*yen 5 filter proximity elasticsearch
鉴于我有如下查询:
council* W/5 (tip OR tips)
上述查询可以翻译为:查找任何具有理事会* 和(提示或提示)不超过5个单词的内容.
所以下面的文字将匹配:
但是这个不应该匹配:
我需要帮助来为此构建一个elasticsearch查询.我在考虑正则表达式查询,但我不太确定更好的替代品.谢谢
您可以结合使用span_near查询,span_multi和span_or.我们可以使用下面的查询来执行相同的搜索.
{
"query": {
"span_near": {
"clauses": [
{
"span_multi":
{
"match":
{
"prefix": { "text": "council"}
}
}
},
{
"span_or": {
"clauses": [
{
"span_term": {
"text": {
"value": "tip"
}
}
},
{
"span_term": {
"text": {
"value": "tips"
}
}
}
]
}
}
],
"slop": 5,
"in_order": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的重要事项是span_term,它是您搜索的文本.在这个例子中,我只有一个名为"text"的字段.趿拉指示的话,我们将允许术语之间的数量,并in_order表示单词的顺序很重要.所以"小组委员会"不会匹配,"理事会小费"将在哪里.