Я несколько дней застрял с этой проблемой, читая документы Elasti c взад и вперед безрезультатно. Я надеюсь, что кто-то может сделать мне правильный ответ.
Предположим, есть два типа данных - родитель и ребенок, которые имеют отношение 1-N. Я храню их в том же индексе, используя custom type
field . У них есть общие и разные поля. Чтобы привести конкретный пример, индекс и некоторые входные данные могут выглядеть примерно так:
PUT /myindex
{
"mappings":
{
"properties": {
"type": {"type": "keyword"},
"fileid" : {"type": "keyword"},
"dirid": {"type": "keyword"},
"filename": {"type": "text"},
"fileauthor": {"type": "text"},
"dirpath": {"type": "text"}
}
}
}
PUT /myindex/_doc/1
{
"type": "dir",
"dirid": 1,
"dirpath": "/home/jd/"
}
PUT /myindex/_doc/2
{
"type": "dir",
"dirid": 2,
"dirpath": "/home/jd/Documents/CV/"
}
PUT /myindex/_doc/3
{
"type": "file",
"dirid": 2,
"fileid": 1,
"filename": "My-Resume.pdf",
"fileauthor": "John Doe"
}
PUT /myindex/_doc/4
{
"type": "file",
"dirid": 1,
"fileid": 2,
"filename": "Some-CV.pdf",
"fileauthor": "John Doe"
}
PUT /myindex/_doc/5
{
"type": "file",
"dirid": 1,
"fileid": 3,
"filename": "book.pdf",
"fileauthor": "John Doe"
}
Теперь я хочу искать в текстовых полях, используя довольно сложные (из нескольких слов) запросы, такие как John Doe CV
. Для отдельных type="dir"
или type="file"
это просто (и запрос будет возвращать документ с _id=4
), но я также хотел бы получить «смешанные» результаты, когда часть запроса содержится в параметре parent-Speci * 1031. * поля и остальное в дочерних спецификациях c полей. В моем примере данных и запросов я бы хотел, чтобы он также возвращал _id=3
, поскольку автор John Doe
, а родительский dirpath
содержит ключевое слово CV
.
Я счастлив просто достань родителя, этого хватит на то что мне нужно. (Я действительно предпочел бы просто получить родителя, но это что-то сверх текущей проблемы, с которой я сталкиваюсь.)
Почему-то я не нашел способа сделать это. Я знаю о типе join
, но это, похоже, здесь не помогает, скорее наоборот. Многие предложения, вопросы SO и элементы документации устарели, поскольку ранее рекомендованная практика устарела.
Конечно, я мог бы просто заполнить каждую запись всеми данными (каждый type="file"
просто скопировал бы значения dirpath
родителя) , но это противоречит моему восприятию оптимального использования памяти и пространства.
Кто-нибудь знает, где искать дальше, пожалуйста? Большое спасибо.