elasticsearch扫描所有对象字段

时间:2017-05-22 11:09:33

标签: elasticsearch

对于以下对象:

{
  name: 'value1',
  name$en_US: 'value2',
  name$fr_CA: 'value3',
  ...
  ...
}

我的查询 `

"query": {
  "filtered": {
    "filter": {
      "and": [
        {
          "term": {
            "type": "product"
          }
        },
        {
          "or": [
            {
              "regexp": {
                "name": ".*sometext.*"
              }
            },
            {
              "regexp": {
                "name$en_US": ".*sometext.*"
              }
            }
          ]
        }
      ]
    }
  },
}

` 针对不同可能的语言环境的我的映射

NAME: {
    type: "string",
    index: "not_analyzed",
    doc_values: true,
    fielddata: {
        format: "doc_values"
    },
    fields: {
    ft: {
            type: "string",
            analyzer: "standard",
            ignore_above: 10922
        }
    },
    ignore_above: 10922
},
NAME$en_CN: {
    type: "string",
    index: "no",
    ignore_above: 10922
},
NAME$en_US: {
    type: "string",
    index: "no",
    ignore_above: 10922
},
NAME$es_US: {
    type: "string",
    index: "no",
    ignore_above: 10922
},

我遇到一个问题,即ElasticSearch与名称配合良好但在名称上失败并且出现在语言环境中。我该如何解决?

添加了查询和映射。

1 个答案:

答案 0 :(得分:0)

问题是,您的name$en_US和其他语言特定字段的index: "no"使其无法搜索。

如果字段的内容未编入索引,则无法在其上进行搜索。来自the documentation的代码段:

  

index选项控制是否对字段值编制索引。它接受truefalse未编入索引的字段无法查询