Поиск без учета регистра с помощью «/» и «-» - PullRequest
0 голосов
/ 04 февраля 2019

Этот вопрос является комбинацией двух моих вопросов:

Ответ на первый вопрос позволяет мне искать данные с помощью «/» и «-».Но поиск чувствителен к регистру.

Во втором вопросе у меня поиск без учета регистра, но поиск "/" и "-" не работает.

Что у меня сейчас:

{  
    "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 Ответ

0 голосов
/ 05 февраля 2019

Вы уже определили анализатор с именем 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...