代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

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

  •  0
  • Karthikeyan  · 技术社区  · 6 年前

    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"
              }
    
            }
           }
          }
    }
    

    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 回复  |  直到 6 年前
        1
  •  0
  •   rnonnon    6 年前

    模糊查询是一个术语级查询,那么,Elasticsearch不会对您的搜索术语应用任何分析器。在将搜索提交给ES之前,必须对其进行规范化。对于其他多种查询类型也是如此。

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

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