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

Elasticsearch使用数组字段索引multi_field

柯阳曦
2023-03-14
问题内容

我是Elasticsearch的新手,正在尝试使用stringarray of strings字段创建多字段索引。有了这些string字段,它们都工作得很好,但是当我尝试在数组中获取一些结果时,它返回一个空的数组。

我的资料:

{
  "string_field_one": "one",
  "string_field_two": "two",
  "array_of_strings_field": [
     "2010", "2011", "2012", "2013"
  ]
}

对应:

{
    "string_field_one" : {
        "type" : "string",
        "analyzer": "snowball",
         "copy_to": "group"
     },
    "string_field_two" : {
        "type" : "string",
        "analyzer": "snowball",
         "copy_to": "group"
     },
    "array_of_strings_field" : {
         "type" : "string",
         "analyzer": "keyword",
         "copy_to": "group"
    }
    "group" : {
        "type": "multi_field"
    }
}

搜索:

 "body": {
          "query": {
              "multi_match": {
                  "query": "one two 2010",
                  type: "cross_fields",
                  operator: "and",
                  fields: [
                      "string_field_one",
                      "string_field_two",
                      "array_of_strings_field",
                      "group"
                  ]
              }
          }
      }

期望:

  • onetwo或搜索,2010应返回结果
  • 搜索one two应返回结果
  • 搜索one two 2010应返回结果
  • 搜索依据one two 2008不应返回结果

我想念什么?


问题答案:

Cross_fields具有约束,所有字段应具有相同的搜索分析器,或者所有查询项应出现在具有相同搜索分析器的字段中。这里不是这种情况。在上述情况下,您需要使用query_string:

例:

"body": {
           "query": {
              "query_string": {
                  "query": "one two 2010",
                  "default_operator": "AND",
                  "fields": [
                      "string_field_one",
                      "string_field_two",
                      "array_of_strings_field",
                      "group"
                  ]

              }
          }
   }


 类似资料:
  • 问题内容: 如何在Elasticsearch中按数组索引查询/过滤? 我有一个像这样的文件: 我想搜索 LIN [0] 是否为“ UP”并且 LIN [1]是否 存在。 谢谢。 问题答案: 这看起来可能像hack,但是可以肯定地起作用。首先,我们将令牌计数类型与多字段一起应用以捕获令牌数量作为字段。因此,映射将如下所示- 链接-http: //www.elasticsearch.org/guide

  • 问题内容: 我对ES还是相当陌生,并正在将其用于我的新项目。首先,我为客户提供了一个简单的映射,其中包含名字和姓氏以及付款信息对象列表。如果我在SQL中执行此操作,那将类似于客户表和具有1:许多关系的付款信息表。 这是我要执行的操作的一个简单示例:https : //gist.github.com/anonymous/6109593 我希望根据payInfos嵌套数组中的任何匹配项找到任何客户,即

  • 我正在尝试使用一个字段,只是为了复制的目的,而不是用下面的映射来索引它自己 但正在获取异常

  • 我正在使用Spring Data ElasticSearch执行CRUD操作。默认情况下,当用@Document注释的POJO写入ElasticSearch索引时,索引字段名称与POJO的Java属性名称相同。如何将索引字段名称配置为不同的名称?例如,对于本文档POJO: 我如何配置它,使ElasticSearch中的索引字段被序列化为county_name而不是countyName?

  • 我正在寻找一种方法来搜索公司名称与关键字标记,但没有停止词。 例如:索引公司名称为“Hansel und Gretel Gmbh” 这里“und”和“Gmbh”是公司名称的停止词。 如果搜索项是"Hansel Gretel",则应找到该文档;如果搜索项是"Hansel",则不应找到任何文档。如果搜索词是"hansel gmbh",也应该找到no文档。 我曾尝试将关键字标记器与自定义分析器中的停止词