regex - elasticsearch span_near查询错误命中

标签 regex elasticsearch lucene

我有一个包含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 查询:

Removes matches which overlap with another span query. The span not query maps to Lucene SpanNotQuery.

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

相关文章:

json - 我需要从字段中获取小于50的值

java - 获取针对特定字段 Lucene 的所有方面记录

java - 将 Lucene 从 3.5 升级到 4.10 - 如何处理 Java API 更改

javascript - 正则表达式查找并替换文件 Javascript 中的文件路径

python - 如何将 python 函数定义(仅此而已)与 RegEx 匹配?

Elasticsearch 标准分词器行为和单词边界

elasticsearch - Elasticsearch 中多字段和复制到的区别?

python - 正则表达式删除忽略字符

regex - 用于删除空格但不删除 ""内部空格的正则表达式

elasticsearch - ElasticSearch 中现有字段的补全建议