Elasticsearch:查询差异中的通配符:“Alex *”vs“* lex *”

时间:2013-10-07 08:47:24

标签: elasticsearch wildcard

我有一堆使用关键字tokenizer索引的数据。

{
    state: open
    settings: {
        index.number_of_replicas: 0
        index.analysis.analyzer.default.type: keyword
        index.number_of_shards: 5
        index.version.created: 900599
    }
    mappings: {
        evenements: {
            properties: {
                prenom: {
                    type: string
                }
                nom: {
                    type: string
                }
                statut: {
                    type: string
                }
                fieldDate: {
                    format: dateOptionalTime
                    type: date
                }
            }
        }
    }
}

查询时

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "evenements.prenom",
            "query": "*lex*"
          }
        }
      ]
    }
  }
}

我得到了结果,但在查询时

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "evenements.prenom",
            "query": "Alex*"
          }
        }
      ]
    }
  }
}

我没有得到任何结果(不是第一个*不会改变任何东西)。

对此有何解释?

感谢。 晏

1 个答案:

答案 0 :(得分:4)

尝试将查询字符串的lowercase_expanded_terms属性设置为false。默认情况下,此属性设置为true,可能会导致您遇到的行为。

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "lowercase_expanded_terms": false,
            "default_field": "evenements.prenom",
            "query": "Alex*"
          }
        }
      ]
    }
  }
}