API ГНЕЗДА Elasticsearch: Как написать дескриптор запроса для реализации поиска с помощью «Начинается с»?

#elasticsearch #nest

Вопрос:

Использование клиента Elasticsearch Nest для поиска магазина названий компаний в Elasticsearch. Вот пример моих запросов.

Я хочу изменить его, чтобы убедиться, что при поиске «Starbucks» он должен возвращать только запись, начинающуюся с буквы «Starbucks». В настоящее время он пересматривает все записи, в которых есть «Старбакс». Основываясь на документации, мне нужно выполнить поиск по поданному «ключевому слову», чтобы получить результат. Нужен пример кода, чтобы понять, как этого добиться.

****Столбец Индекса Эластичного поиска»

              "name": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                }
 

Код*
var escapedSearchTerm = Эластичные расширения.EscapeQuery(название компании);
верните новый QueryContainerDescriptor().Bool(b => b.Должен(mu =>> mu
.Строка запроса(qs => qs
.AllowLeadingWildcard(true)
.AnalyzeWildcard(верно)
.Поля(f => f.Поле(s =>> s.Company.Name).Поле(s => s.Организация.Общее имя))
.Запрос(escapedSearchTerm)
)));

Ответ №1:

Я не знаком с клиентом Elastic Search Nest, но в формате JSON вы можете реализовать поиск с функциональностью, используя префиксный запрос

Добавление рабочего примера с данными индекса,отображением,поисковым запросом и результатом поиска

Сопоставление индексов:

 {
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "filter": "lowercase"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}
 

Данные Индекса:

 {
    "name":"Starbucks is a American multinational chain of coffeehouses"
}
{
    "name":"coffee at Starbucks"
}
 

Поисковый запрос:

 {
  "query": {
    "prefix": {
      "name": {
        "value": "Starbucks",
        "case_insensitive": true    // this param was introduced in 7.10.0
      }
    }
  }
}
 

Результат поиска:

 "hits": [
      {
        "_index": "67424740",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "name": "Starbucks is a American multinational chain of coffeehouses"
        }
      }
    ]
 

Комментарии:

1. @FlexJogger, пожалуйста, просмотрите ответ и дайте мне знать, решит ли это вашу проблему ?

2. Спасибо Эскодеру. Я ищу образец кода Nest API для поиска ES.

3. Я попробовал в инструменте Kibana Dev, и он не дал никакого результата. POST _search { «запрос»: { «префикс»: { «организация. legalEntity.name»: { «стоимость»: «Costco» } } } }

4. @FlexJogger какую версию elasticsearch вы используете? Не могли бы вы поделиться своим отображением индекса и некоторыми образцами данных индекса, по которым вы выполняете свой запрос ?