2
我有一个包含一个XML文件,我试图找到这种匹配的文本字段:elasticsearch span_near查询虚假点击
<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
的角度来看它仍然有效。
任何想法,我可以防止这种“贪婪”的搜索?
据我从this话题正则表达式知道是不是因为一个选项“Elasticsearch(和Lucene)不支持全Perl兼容正则表达式语法”。这意味着regexp-query
匹配令牌,而不是整个字符串。
我也试过最后span_term
如/payer
或\\/payer
或</payer
但它什么都没发现。
也许['span_not'](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-not-query.html)可以在这里帮助。顺便说一句,有一些Lucene正则表达式可以比PCRE更好地实现。例如。您可以使用'〜()bic = \“123456789 \”〜() '来匹配整个字符串,这些字符串与您提供的不需要的字符串不匹配。 –
这里有什么问题?你只想找到与付款人完全子字符串? – Mysterion
Mysterion,yess – SergeiK