Elasticsearch-基于不区分大小写的匹配词

时间:2018-08-07 09:20:41

标签: java elasticsearch elastic-stack fuzzy-search

Am从Elasticsearch索引中获取文档,并使用whitespace带分词器的令牌生成器。

请在下面找到我的映射文件。

PUT stemmer_lower_test
 {
      "settings": {
        "analysis": {
        "analyzer": {
           "value_analyzer": {
           "type": "custom",
            "tokenizer": "whitespace",
           "char_filter": [
            "html_strip"
           ],
           "filter": ["lowercase", "asciifolding", "my_stemmer"]
         }
       },
       "filter" : {
                "my_stemmer" : {
                    "type" : "stemmer",
                    "name" : "minimal_english"
                }
         }
     }
    },
    "mappings": {
      "doc": {
        "properties": {
          "product_attr_value": {
            "type": "text",
            "analyzer": "value_analyzer"
          },
          "product_id": {
            "type": "long"
          },
          "product_name":{
          "type": "text"
          }

        }
       }
      }
}

请找到我正在使用的模糊API:

QueryBuilder qb1 = QueryBuilders.boolQuery()
                .must(QueryBuilders.fuzzyQuery("product_attr_value", keyword).boost(0.0f).prefixLength(3).fuzziness(Fuzziness.AUTO).transpositions(true));

如果要搜索value(小写)并在1555周围获取计数。如果我搜索Value(仅大写第一个字符)并得到8979个计数。

我期望两个计数应该相同。就像我想搜索时不区分大小写。

1 个答案:

答案 0 :(得分:0)

模糊查询是一个词级查询,因此,Elasticsearch不会在您的搜索词上应用任何分析器。在将搜索提交给ES之前,您必须对其进行标准化。其他多种查询类型也是如此。

  

虽然全文查询将在执行之前分析查询字符串,但术语级查询将对存储在倒排索引中的确切术语进行操作

请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/term-level-queries.html