Я супер новичок в Elastic Search.У меня есть вариант использования, который, кажется, может быть решен отношениями родитель-ребенок.Родительский документ содержит описание НПО.Детский документ содержит различные отзывы, отправленные в НПО.
Parent Doc structure
{
name
address
description
}
Child doc
{
feedbackContent
}
Скажем, НПО-А 4 отзыва (то есть 4 дочерних документа)
Другая НПО-B имеет 2 отзыва (имеется в виду 2 дочерних документа)
Клиент должен иметь возможность искать НПО, у которых есть все термины в строке запроса.Пример - клиент выполнил поиск "best" AND "location".
Поскольку best
присутствует в child1 и child2, а location
присутствует в child 4, NGO-A является допустимым выводом.Однако для NGO-B child2 содержит один поисковый термин, а другой поисковый термин отсутствует в любом другом дочернем документе, поэтому NGO-B недопустим.
Я прочитал документ - https://blog.mimacom.com/parent-child-elasticsearch/ это неплохо, но не может прийти к выводу, можно ли это сделать.
Примеры, которые я пробовал
PUT message_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"mapping.single_type": true
},
"mappings": {
"doc": {
"properties": {
"ngo": {"type": "text"},
"feedback": {"type": "text"},
"ngo_relations": {
"type": "join",
"relations": {
"ngo": "feedback"
}
}
}
}
}
}
POST message_index/doc/_bulk
{"index": {"_id":1}}
{"name":"teach for india", "ngo_relations": {"name":"ngo"}}
{"index":{"_id":2}}
{"name":"hope for autism", "ngo_relations": {"name":"ngo"}}
PUT message_index/doc/3?routing=1
{"feedback":"best food","ngo_relations":{"name":"feedback", "parent":1}}
PUT message_index/doc/4?routing=1
{"feedback":"average location","ngo_relations":{"name":"feedback", "parent":1}}
PUT message_index/doc/5?routing=1
{"feedback":"awesome staff","ngo_relations":{"name":"feedback", "parent":1}}
PUT message_index/doc/6?routing=2
{"feedback":"best teachers","ngo_relations":{"name":"feedback", "parent":2}}
PUT message_index/doc/7?routing=2
{"feedback":"awesome overload","ngo_relations":{"name":"feedback", "parent":2}}
Для поиска лучшего и определения местоположения, просто нужно вернуть учение для индийской НПО.
Нет показов:
GET message_index/_search
{
"query": {
"has_child": {
"type": "feedback",
"query": {
"bool": {
"must": {
"term": {"feedback": "best"}
},
"must": {
"term": {"feedback": "location"}
}
}
}
}
}
}
Оба документа возвращены
GET message_index/_search
{
"query": {
"has_child": {
"type": "feedback",
"query": {
"bool": {
"should": {
"term": {"feedback": "best"}
},
"should": {
"term": {"feedback": "location"}
}
}
}
}
}
}