Запрос ElasticSearch для поиска контента, точно соответствующего другим значениям
В ElasticSearch у меня есть документы, следующие структуре примера документа, приведенного ниже:
{
"ProductType": "TV",
"Manufacturer": "XYZ",
"Model": "XYZ-52-TV",
"ProductDocumentationTopic": "DeviceSpecifications",
"Content": "Lorem ipsum screen size = 10 Minim eu laborum ex veniam et ut commodo ullamco culpa irure ad nulla veniam et irure deserunt eiusmod nostrud"
}
Я пытаюсь искать Content
значение только в пределах конкретного продукта. Продукт будет идентифицирован точно совпадающими значениями для ProductType
,Manufacturer
,Model
, а также ProductDocumentationTopic
,
Следовательно, следуя приведенному выше примеру, как я могу найти Content
в документации "Технические характеристики устройства" телевизора модели "XYZ-52-TV" производства "XYZ"?
Пожалуйста, обратитесь с соответствующим запросом ElasticSearch.
1 ответ
Вы должны начать с правильного определения соответствия, которое сообщит Elasticsearch, как хранить ваши поля в индексе. По умолчанию каждая строка из вашего JSON будет проанализирована, что означает, что вы сможете выполнять полнотекстовый поиск по таким полям. Больше информации здесь
Это не совсем то, что вы хотите достичь во всех областях, кроме контента. Поэтому, если вы хотите выполнить фильтрацию по всем другим полям, вы должны определить их как ключевые слова в вашем определении отображения.
PUT http://{yourhost+port}/{indexname} HTTP/1.1
{
"mappings": {
"{yourtypename}": {
"properties": {
"ProductType": {
"type": "keyword"
},
"Manufacturer": {
"type": "keyword"
},
"Model": {
"type": "keyword"
},
"ProductDocumentationTopic": {
"type": "keyword"
},
"Content": {
"type": "text"
}
}
}
}
}
Затем вы можете использовать запрос с фильтром, где вы можете выполнить полнотекстовый поиск по полю контента и точное соответствие для всех остальных ( документы)
{
"query": {
"bool": {
"must": [
{ "match": { "Content": "size" }}
],
"filter": [
{ "term": { "Model": "XYZ-52-TV" }},
{ "term": { "Manufacturer": "XYZ" }},
{ "term": { "ProductType": "TV" }}
]
}
}
}