鉴于我有如下查询:
council* W/5 (tip OR tips)
上述查询可以翻译为:查找任何理事会* 和(提示或提示)相隔不超过5个字的内容。
以下文字将匹配:
但是这个不应该匹配:
我需要帮助来为此构建一个elasticsearch查询。我在考虑正则表达式查询,但我不太确定更好的替代品。感谢
答案 0 :(得分:6)
您可以结合使用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
}
}
}
需要注意的重要事项是 span_term ,这是您搜索的文字。在这个例子中,我只有一个名为“text”的字段。 Slop 表示术语之间允许的单词数, in_order 表示单词的顺序很重要。因此,“小组委员会”将不会匹配,“理事会小费”将在那里。