elasticsearch - 按 ElasticSearch 中另一个字段的值过滤值
问题描述
我想知道如何通过另一个字段的值过滤字段的值,例如:
这是映射
PUT /test
{
"mappings": {
"dynamic": "strict",
"properties": {
"testArr": {
"type": "text"
},
"testArr2": {
"type": "text"
}
}
}
}
文件:
PUT /test/_doc/1
{
"testArr": ["1", "2", "3"],
"testArr2": ["2"]
}
如何仅返回字段testArr
中不存在的字段值testArr2
?
结果,我想看到这样的东西:
{
"_source": {
"testArr": ["1", "3"]
}
}
我尝试了什么:
GET /test/_search
{
"_source": "testArr",
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": "!doc['testArr2'].contains(doc['testArr'].value)",
"lang": "painless"
}
}
}
}
}
}
看起来它有效,但它返回所有值 [“1”,“2”,“3”],我只需要在结果 = [“1”,“3”] 上有所不同,而不是所有值
解决方案
对于那些将搜索答案的人,我在script_fields中找到了解决方案:
GET /test/_search
{
"script_fields": {
"filtered": {
"script": {
"source": "ArrayList result = []; for(Object v:doc['testArr']) { if(!doc['testArr2'].contains(v)) { result.add(v); } } return result;",
"lang": "painless"
}
}
}
}
推荐阅读
- python - 如何从 Python 成功保存高分辨率图像
- javascript - 如何将每个 ajax 调用中的变量传递到 1 drawchart 函数中
- laravel - Vuejs - 发布文件不起作用 - Laravel Spark
- javascript - 使用哪个 JS 以及如何实现 SVG 文本中的图像弹出?
- angularjs - 在 PHP 中使用 Angular 保存动态创建的表单数据
- vb.net - 是否有任何方法以编程方式在 Vb.NET 中编辑/添加代码?
- c++ - 使用 cout 打印字符串数组不起作用
- java - Java 返回一个已删除的文件
- scala - 来自 Akka Actor 的异步回调
- javascript - Javascript 在 Ajax 页面中不起作用