我有一个包含xml文档的文本字段,我尝试在其中找到这种匹配项:
<Payer> [...] bic=\"123456789\" [...] </Payer>
使用以下查询:

{
    "query": {
        "span_near" : {
            "clauses" : [
            { "span_term" : { "field" : "payer" }},
            { "span_term" : { "field" : "bic" }},
            { "span_term" : { "field" : "123456789" }},
            { "span_term" : { "field" : "payer"}}
            ],
            "slop" : 500,
            "in_order" : true
        }
    }
}

问题是,如果xml文档包含类似以下内容,有时我会得到错误的匹配:
<Payer>bic=\"111111111\"</Payer><Payee>bic=\"123456789\"</Payee><Payer>bic=\"222222222\"</Payer>

查询查找PayeE而不是PayeR。从elastic Angular 来看,它仍然有效。

有什么主意可以阻止这种“贪婪”搜索吗?

this所知,regexp不是一个选择,因为“Elasticsearch(和lucene)不支持与Perl兼容的正则表达式的语法”。这意味着regexp-query匹配标记,而不是整个字符串。

我还尝试制作最后一个span_term(例如/payer\\/payer</payer),但它什么也没找到。

最佳答案

您可以添加 span_not 查询:

关于regex - elasticsearch span_near查询错误命中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46000178/

10-15 20:08