使用“/”和“ - ”进行不区分大小写的搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用“/”和“ - ”进行不区分大小写的搜索相关的知识,希望对你有一定的参考价值。

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

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

在第二个问题中,我有不区分大小写的搜索,但搜索“/”和“ - ”被打破。

我现在拥有的:

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

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

答案

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

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

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

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

如果您只想使用带有空白标记生成器的小写,则定义另一个分析器,如下所示:

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

然后使用上面的author字段如下:

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

以上是关于使用“/”和“ - ”进行不区分大小写的搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何进行不区分大小写的搜索。 Xamarin sqlite

使用 Amazon Dynamodb 进行不区分大小写的查询

NSPredicate 使用 CloudKit 进行不区分大小写的字符串搜索

如何使用 less 使用模式修饰符进行不区分大小写的搜索?

IOS / Objective-C:使用StringByReplacingOccurrencesOfString进行不区分大小写搜索

使用 Hibernate 进行不区分大小写的搜索