当前位置: 首页 > 面试题库 >

仅具有与术语列表相交但不与其他术语相交的术语的Elasticsearch文档

方树
2023-03-14
问题内容

我有带有标签列表的文档:

    {
       “field”:{
          “标签”: [
               “ foo”,
               “酒吧”,
               “巴兹”
          ],
          “名称”: [
             “文件一”
          ],
          “ description”:“优良的第一份文件”,
          “ id”:1
       }
    },
    {
       “字段”:{
          “标签”: [
               “ foo”,
               “dog”
          ],
          “name”: [
             “文件二”
          ],
          “ description”:“优良的第二份文件”,
          “ id”:2
       }
    }

我有一个术语列表:

    [“ foo”,“ bar”,“ qux”,“ zip”,“ baz”]

我想要一个查询,该查询将返回在术语列表中具有标签的文档-但没有其他术语。

因此,鉴于上述列表,查询将返回Document One,但 不会 返回Document Two(因为查询中的术语dog不在术语列表中。)

我尝试使用not terms过滤器进行查询,如下所示:

    POST / documents / _search?size = 1000
    {
       “字段”:[
          “ID”,
          “名称”,
          “标签”
       ],
       “过滤器”:{
           “不”:{
               “过滤器”:{
                   “布尔”:{
                       “一定不”: {
                          “条款”:{
                             “标签”: [
                                “ foo”,
                                “酒吧”,
                                “ qux”,
                                “压缩”,
                                “巴兹”
                             ]
                          }
                       }
                   }
               }
           }
       }
    }

但这没有用。

在给定的术语列表的情况下,如何创建一个查询,该查询将匹配仅包含列表中的术语而没有其他术语的文档?换句话说,所有文档都应包含标签列表,这些标签是所提供术语列表的子集。


问题答案:

您可以使用脚本过滤器来检查数组项是否在文档中具有标签数组的所有值。我建议您制作一个单独的groovy文件或纯javascript文件,将其放在config/ scripts / folderToYourScript中,并在您的查询中使用filter: { script : {script_file:file } }

脚本文件中时,您可以使用循环来检查需求



 类似资料:
  • 我有一个带有标签列表的文档: 我有一个术语清单: 我想要一个查询,将返回在术语列表中有标签的文档-但没有其他术语。 因此,给定上面的列表,查询将返回,但不返回(因为它有一个术语不在术语列表中)。 我尝试使用过滤器执行查询,如下所示: 但那没用。 如何创建一个查询,在给定术语列表的情况下,该查询将匹配列表中仅包含术语而不包含其他术语的文档?换句话说,所有文档都应该包含一个标签列表,这些标签是所提供的

  • 另外,类型中的所有文档都存储了上面提到的community的值。感谢帮助。

  • 规范、文档和对象模型等都使用特定的术语来表述。 IdentityServer IdentityServer 是一个 OpenID Connect 提供程序 —— 它实现了OpenID Connect 和 OAuth2 协议。 对于相同的角色,不同的文献将使用不同的术语 —— 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider

  • 请注意,本术语表中的定义简短而简单,旨在传达核心思想,而不是术语的完整细微之处。 有关更多详细信息,请参阅正文中的参考资料。 [TOC] 异步(asynchronous) 不等待某些事情完成(例如,将数据发送到网络中的另一个节点),并且不会假设要花多长时间。请参阅第153页上的“同步与异步复制”,第284页上的“同步与异步网络”,以及第306页上的“系统模型与现实”。 原子(atomic) 1.在

  • 下面是一系列的 Ansible 文档中的术语。 在主界面查看文档,了解这些术语的上下文环境,不过这里是一个好的资源测试你对 Ansible 组件的了解和更好的理解他们是如何组合起来的。你可能在想回顾 Ansible 知识的时候看看这里,在邮件中出现一些术语的时候参考一下这个文档。 动作(Action) 一个动作属于一个任务的一部分,指定运行的模块,然后传递参数给此模块。每个任务之一一个动作,但是它

  • Spring Batch术语表 Batch 批 An accumulation of business transactions over time. 随着时间累积而形成的一批业务事务。 Batch Application Style (批处理程序风格) Term used to designate batch as an application style in its own right si