我有一个包含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/