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

带“/”和“-”的不区分大小写搜索

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

    这个问题是我的两个问题的组合:

    第一个问题的答案允许我用“/”和“-”搜索数据。但是搜索是区分大小写的。

    在第二个问题中,我进行了不区分大小写的搜索,但是搜索“/”和“-”被破坏了。

    我现在拥有的:

    {  
        "settings": {
        "analysis": {
          "analyzer": {
            "folding": {
              "tokenizer": "whitespace",
              "filter":  [ "lowercase", "asciifolding" ]
            }
          },
          "normalizer": {
            "lowerasciinormalizer": {
              "type": "custom",
              "filter":  [ "lowercase", "asciifolding" ]
            }
          }
        }
      },
      "mappings": {
                 "entity": {
                     "properties": {
    
                         "Description": {
                  "type": "text",
                    "analyzer": "whitespace",
                              "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                      "normalizer": "lowerasciinormalizer"      
                                    }
                                }
                  },
    
                        "Name": {
                  "type": "text",
                    "analyzer": "whitespace",
                        "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                      "normalizer": "lowerasciinormalizer"      
                                    }
                                }
                }
                }
         }
        }
    }
    

    此索引允许我执行不区分大小写的搜索,但找不到类似以下的文档:

    PUT
    {
      "name": "Harry Potter",
      "author": "Some 28/56 another"
    }
    
    POST
    {
        "query": {
            "query_string": { "default_field": "author", "query": "*28\\/56*" }
        }
    }
    

    是否可以进行不区分大小写的搜索,以便与“/”和“-”一起使用?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nishant    6 年前

    您已经定义了一个名为 folding 它可以满足您对不区分大小写搜索的要求 / - 未用于标记输入字符串。你应该增加 author 在下面的映射中:

    "author": {
      "type": "text",
      "analyzer": "folding"
    }
    

    然后使用下面的查询进行匹配:

    {
      "query": {
        "query_string": {
          "default_field": "author",
          "query": "28\\/859"
        }
      }
    }
    

    如果您只想使用带空格标记器的小写字母,那么定义另一个分析器如下:

    "lowercaseWs": {
      "filter": [
        "lowercase"
      ],
      "tokenizer": "whitespace"
    }
    

    然后将上面的内容与 作者 字段如下:

    "author": {
      "type": "text",
      "analyzer": "lowercaseWs"
    }