Я пытаюсь запросить домен AWS ElasticSearch от работника Lambda.
Для этого я использую https://www.npmjs.com/package/http-aws-es и основной javascript клиент для эластичного поиска.
Я запрашиваю документы со следующими соответствующими полями:
- Поле
ref
— строка - Поле
status
— строка ENUM (REMOVED
,BLOCKED
,PUBLISHED
,PENDING
,VERIFIED
) - Поле
field
— массив строк - Поле
thematics
— массив строк
Чего я хочу добиться, так это:
- Отфильтровать все документы, которые не являются ни
PUBLISHED
, ниVERIFIED
, ни где установлено полеref
- Вернуть лучшие совпадения с моим аргументом
keywwords
(массив строк) относительно значений вfield
иthematics
- Сортировать, чтобы документы со статусом
PUBLISHED
располагались первыми - Ограничьте количество результатов до 20
Я нашел оператора more_like_this
и попробовал. Я шаг за шагом строю свой запрос, и актуальная версия, по крайней мере, не возвращает ошибку, но документы не возвращаются. Он по-прежнему пропускает фильтр ref
+ #3 и #4 сверху. Вот запрос:
const client = new elasticsearch.Client({
host: ELASTICSEARCH_DOMAIN,
connectionClass: httpAwsEs,
amazonES: {
region: AWS_REGION,
credentials: new AWS.EnvironmentCredentials('AWS')
}
})
let keywords = event.arguments.keywords
let rst = await client.search({
body: {
'query': {
'bool': {
'filter': {
'bool': {
'must_not': [
{
'term': {
'status': 'REMOVED'
}
},
{
'term': {
'status': 'PENDING'
}
},
{
'term': {
'status': 'BLOCKED'
}
}
]
}
},
'must': {
'more_like_this': {
'fields': ['field', 'thematics'],
'like': keywords,
'min_term_freq': 1,
'max_query_terms': 2
},
'should': [
{
'term': {
'status': 'PUBLISHED'
}
}
]
}
}
}
}
})
console.log(rst)
return rst
Я должен загрузить свой лямбда-код для отладки, и это сильно усложняет отладку. Поскольку я никогда раньше не делал ES-запросов, я хотел получить хотя бы несколько советов о том, как это сделать, или узнать, неправильно ли я использую синтаксис ES-запросов.
РЕДАКТИРОВАТЬ:
В соответствии с запросом, вот мое отображение индекса (с типом JS):
- текст города (строка)
- contact_email текст (строка)
- текст contact_entity (строка)
- contact_firstname текст (строка)
- contact_lastname текст (строка)
- текст контактов (строковый список)
- текст страны (строка)
- Дата создания (строка)
- текст описания (строка)
- текст editKey (строка)
- текст поля (строка)
- текст идентификатора (строка)
- текст имени (строка)
- текст pubId (строка)
- текст ссылки (строка)
- текст состояния (строка)
- текст состояния (строка)
- тематический текст (массив строк)
- введите текст (массив строк)
- updateAt (строка)
- текст URL-адреса (строка)
- Текст VerifyKey (строка)
- текст зоны (массив строк)
Взято из консоли управления эластичным поиском AWS (вкладки индекса › сопоставления)