Это зависит от того, что вы имеете в виду, когда говорите ПРИСОЕДИНЯЙТЕСЬ. Elasticsearch не похож на обычную базу данных, которая поддерживает JOIN между таблицами. Это система текстового поиска, которая управляет документами в индексах.
С другой стороны, вы можете выполнять поиск в одном и том же индексе по нескольким типам, используя поля, общие для каждого типа.
Например, взяв ваши данные, я могу создать индекс с двумя типами и их данными следующим образом:
curl -XPOST localhost:9200/product -d '{
"settings" : {
"number_of_shards" : 5
}
}'
curl -XPOST localhost:9200/product/type1/_mapping -d '{
"type1" : {
"properties" : {
"product_id" : { "type" : "string" },
"price" : { "type" : "integer" },
"stock" : { "type" : "integer" }
}
}
}'
curl -XPOST localhost:9200/product/type2/_mapping -d '{
"type2" : {
"properties" : {
"product_id" : { "type" : "string" },
"category" : { "type" : "string" },
"manufacturer" : { "type" : "string" }
}
}
}'
curl -XPOST localhost:9200/product/type1/1 -d '{
product_id: "1111",
price: "23",
stock: "100"
}'
curl -XPOST localhost:9200/product/type2/1 -d '{
product_id: "1111",
category: "iPhone case",
manufacturer: "Belkin"
}'
Я фактически создал один индекс под названием product с двумя типами type1 и type2. Теперь я могу выполнить следующий запрос, и он вернет оба документа:
curl -XGET 'http://localhost:9200/product/_search?pretty=1' -d '{
"query": {
"query_string" : {
"query" : "product_id:1111"
}
}
}'
{
"took" : 95,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.5945348,
"hits" : [ {
"_index" : "product",
"_type" : "type1",
"_id" : "1",
"_score" : 0.5945348, "_source" : {
product_id: "1111",
price: "23",
stock: "100"
}
}, {
"_index" : "product",
"_type" : "type2",
"_id" : "1",
"_score" : 0.5945348, "_source" : {
product_id: "1111",
category: "iPhone case",
manufacturer: "Belkin"
}
} ]
}
}
Причина в том, что Elasticsearch будет искать все документы в этом индексе независимо от их типа. Это все еще отличается от JOIN в том смысле, что Elasticsearch не собирается делать декартово произведение документов, принадлежащих каждому типу.
надеюсь, это поможет
person
isaac.hazan
schedule
25.03.2014