Строка соответствия Elasticsearch с подобным оператором

Я бы запросил elasticsearch для получения всего документа, который имеет значение поля, такое как заданная строка.

Например, field LIKE "abc" должен вернуться

  • "азбука"
  • "абкдеф"
  • "abcd"
  • "абв1"

Таким образом, все поля, содержащие "abc" строку внутри.

Я пробую этот запрос, но возвращаю только документ с field = "abc":

{"query":{"more_like_this":{"fields":["FIELD"],"like_text":"abc","min_term_freq" : 1,"max_query_terms" : 12}}}

Какой правильный запрос?

Спасибо


person michele    schedule 19.12.2017    source источник


Ответы (3)


Если вы пытаетесь выполнить префиксный запрос, вы можете использовать это.

{ "query": {
  "prefix" : { "field" : "abc" }
}

См. Запрос префикса ElasticSearch Запрос префикса ElasticSearch< /а>

person Aryeetey Solomon Aryeetey    schedule 19.12.2017

Хотя ваш вопрос неполный. Я постараюсь дать вам несколько идей.

Одним из способов, безусловно, является префиксный запрос, но гораздо более эффективным является построение анализатора пограничных энграмм. Таким образом, ваши данные будут подготовлены для вставок, и запрос будет намного быстрее. Edge ngram также является наиболее гибким способом реализации вашей функциональности, поскольку вы можете автоматически заполнять слова, которые появляются в любом порядке. Если вам не нужно этого делать, а вам нужны только запросы «поиск по мере ввода», то лучший способ — использовать подсказку завершения. Если вам нужно найти строки, которые появляются в середине слов, вы можете проверить анализатор ngram.

Вот как я установил анализатор Edge Ngram из своего кода.

        "settings": {
            "analysis": {
                "filter"  : {
                    "edge_filter"        : {
                        "type"    : "edge_ngram",
                        "min_gram": 1,
                        "max_gram": 256
                    }
                },
                "analyzer": {
                    "edge_analyzer" : {
                        "type"     : "custom",
                        "tokenizer": "whitespace",
                        "filter"   : ["lowercase", "edge_filter"]
                    },
                    "lowercase_whitespace": {
                        "type": "custom",
                        "tokenizer": "whitespace",
                        "filter": [ "lowercase" ]
                    }
                }
            }
        },
        "mappings": {
            "my_type": {
                "properties": {
                    "name": {
                        "type": "keyword",
                        "fields": {
                            "suggest": {
                                "type": "text",
                                "analyzer" : "edge_analyzer",
                                "search_analyzer": "lowercase_whitespace"
                            }
                        }
                    }
                }
            }
        }
person user732456    schedule 21.12.2017

Вы должны быть в состоянии выполнить запрос с подстановочными знаками, как описано здесь.

Elasticsearch нравится запрос

{
  "query": {
    "wildcard": {
      "<<FIELD NAME>>": "*<<QUERY TEXT>>*"
    }
  }
}
person AdamPillingTech    schedule 19.12.2017