Все, я пытаюсь вызвать шаблон поиска, определенный в ES 6.6.Шаблон имеет переменные подкачки (от и размер) и электронные письма, которые я передаю в массиве.Это также имеет сортировку с пользовательской логикой сценария.Когда я запускаю это в кибане, я не вижу, что подкачка и сортировка не работают.Я был бы признателен за любую помощь в получении этого на работу.Пожалуйста, смотрите детали ниже.Есть два индекса, которые я ищу, используя псевдоним индекса.
Отображения для индексов человека и гостя одинаковы (только для упрощения примера)
Отображение индекса
PUT _template/person_guest_template
{
"order": 0,
"index_patterns": ["person*","guest*"],
"settings": {
"index": {
"analysis": {
"filter": {
"autoComplete_filter": {
"type": "edge_ngram",
"min_gram": "2",
"max_gram": "20"
}
},
"analyzer": {
"autoComplete": {
"filter": ["lowercase", "asciifolding","autoComplete_filter"],
"type": "custom",
"tokenizer": "whitespace"
},
"default": {
"filter": ["lowercase", "asciifolding"],
"type": "custom",
"tokenizer": "whitespace"
}
}
},
"number_of_shards": "3",
"number_of_replicas": "1"
}
},
"mappings": {
"_doc": {
"dynamic": false,
"properties": {
"firstName": {
"type": "keyword",
"fields": {
"search": {
"type": "text",
"analyzer": "autoComplete",
"search_analyzer": "default"
}
}
},
"lastName": {
"type": "keyword",
"fields": {
"search": {
"type": "text",
"analyzer": "autoComplete",
"search_analyzer": "default"
}
}
},
"email": {
"type": "keyword"
},"email": {
"type": "keyword"
}
}
}
}
}
Определение SearchTemplate
POST _scripts/guest_person_by_email
{
"script": {
"from": "{{from}}{{^from}}0{{/from}}",
"size": "{{size}}{{^size}}5{{/size}}",
"sort": [
{
"_script": {
"order": "asc",
"type": "number",
"script": "return (doc['type'].value == 'person')? 0 : 1;"
}
},
{
"firstName": {
"order": "asc"
}
},
{
"lastName": {
"order": "asc"
}
}
],
"lang": "mustache",
"source": """
{
"query":{
"bool":{
"filter":{
"terms":{
"email":
{{#toJson}}emails{{/toJson}}
}
}
}
}
}
"""
}
}
Поиск с использованием SearchTemplate
GET guest-person/_search/template
{
"id":"guest_person_by_email",
"params": {
"emails":["rennishj@test.com"]
}
}
Пример данных
PUT person/_doc/1
{
"firstName": "Rennish",
"lastName": "Joseph",
"email": [
"rennishj@test.com"
],
"type":"person"
}
Вызов поисковой таблицы с использованием NEST 6.6
List<string> emails = new List<string>(){"rennishj@test.com"};
var searchResponse = client.SearchTemplate<object>(st => st
.Index("guest-person")
.Id("guest_person_by_email")
.Params(p => p
.Add("emails", emails.ToArray())
.Add("from", 0)
.Add("size", 50)
)
);
Наблюдения
- Когда я удаляю из,логика размера и сортировки из searchtemplate, она работает
- Похоже, я помещаю переменные sort и from / size в неправильное место?
Я нашел похожий пост здесь https://discuss.elastic.co/t/c-nest-5-search-with-template/104074/2 но похоже, что GetSearchTemplate и PutSearchTemplate более не поддерживаются в NEST 6.x
Можно ли это сделать с помощью поисковых шаблонов?Мы используем несколько очень сложных запросов NEST, отходим от NEST и используем шаблоны поиска.