Elasticsearch 6.3.2 - как искать пароли, используя все поля в этом индексе?

  1. У вас есть идея для создания поискового запроса? множественный поиск + поиск слов.

 {
      "shop_index": {
          "settings": {
              "index": {
                  "number_of_shards": "5",
                  "provided_name": "shop_index",
                  "creation_date": "1534235625279",
                  "analysis": {
                      "filter": {
                          "nGram_filter": {
                              "token_chars": [
                                  "letter",
                                  "digit",
                                  "punctuation",
                                  "symbol"
                              ],
                              "min_gram": "2",
                              "type": "nGram",
                              "max_gram": "20"
                          }
                      },
                      "analyzer": {
                          "nGram_analyzer": {
                              "filter": [
                                  "lowercase",
                                  "asciifolding",
                                  "nGram_filter"
                              ],
                              "type": "custom",
                              "tokenizer": "whitespace"
                          },
                          "whitespace_analyzer": {
                              "filter": [
                                  "lowercase",
                                  "asciifolding"
                              ],
                              "type": "custom",
                              "tokenizer": "whitespace"
                          }
                      }
                  },
                  "number_of_replicas": "1",
                  "uuid": "SBB9u344RVGm1QQUo-rVMg",
                  "version": {
                      "created": "6030299"
                  }
              }
          }
      }
    }

  1. отображение

{
      "shop_index": {
          "mappings": {
              "products": {
                  "properties": {
                      "html_keywords": {
                          "type": "text"
                      },
                      "html_title": {
                          "type": "text"
                      },
                      "name": {
                          "type": "text"
                      }
                  }
              }
          }
      }
    }

  1. Я хотел бы найти фразу как -> поиск "ДОМ"
    • набрав -> "хо" -> покажи мне "ДОМ"
    • набрав -> "хоу" -> покажи мне "ДОМ"
    • набрав -> "использовать" -> показать мне "ДОМ
    • набрав -> "se" -> покажи мне "ДОМ"

1 ответ

Вы можете добиться этого с помощью нечеткого запроса - https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html. Также подумайте о том, чтобы объединить его с slop (насколько далеко друг от друга допускаются термины) и использовать multi_match для поиска во множестве полей.

Пример запроса:

{
    "query":
    {
        "multi_match":
        {
            "fields": ["field1", "field2"],
            "query": "hous",
            "slop": 3,
            "fuzziness": "AUTO"
        }
    }
}
Другие вопросы по тегам