我的索引中有一个* data *字段,
我只需要doc 2作为结果,即在逻辑上* b 在数组字段数据中的 a *之前。
doc 1:
data = ['a','b','t','k','p']
文件2:
data = ['p','b','i','o','a']
目前,我正在尝试在[a,b]上使用条款,然后在另一个代码段中检查顺序。请提出更好的建议。
问题来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
我的理解是,唯一的方法就是利用跨度查询,但是它不适用于值数组。
您需要将这些值连接到一个以space
作为分隔符的text字段中,重新整理文档并在该字段上使用Span Near查询:
请找到以下映射,示例文档,查询和响应:
对应: PUT my_test_index { "mappings": { "properties": { "data":{ "type": "text" } } } } 样本文件: POST my_test_index/_doc/1 { "data": "a b" }
POST my_test_index/_doc/2
{
"data": "b a"
}
跨度查询: POST my_test_index/_search { "query": { "span_near" : { "clauses" : [ { "span_term" : { "data" : "a" } }, { "span_term" : { "data" : "b" } } ], "slop" : 0, <--- This means only ` a b ` would return but ` a c b ` won't. "in_order" : true <--- This means a should come first and the b } } }
请注意,* slop *控制所允许的最大中间不匹配位置数。
响应: { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.36464313, "hits" : [ { "_index" : "my_test_index", "_type" : "_doc", "_id" : "1", "_score" : 0.36464313, "_source" : { "data" : "a b" } } ] } }
让我知道是否有帮助!
回答来源:stackoverflow