Как использовать соединение с тем же типом или индексом в ElasticSearch, как Solr - PullRequest
0 голосов
/ 15 мая 2018

Теперь у меня возникла проблема, так как мне нужно запросить некоторые данные из типа (или индекса) с именем «product», и у меня есть три параметра ($ p1, $ p2, $ p3), которые могут определять некоторые категории, затем яНужно получить весь продукт в этих категориях.Я знаю, как это можно сделать в MySQL следующим образом:

select * 
from product 
where catagory in (
    select catagory 
    from product
    where p1 = $p1 and p2=$p2 and p3=$p3
)

И я знаю, что могу сделать это в solr как

{!join from=catagory to=catagory}p1:$p1 AND p2:$p2 AND p3:$p3

Но я хочу знать, как я могу это сделатьв ElasticSearch.

Кстати, извините за мой английский пул.Я ценю вашу помощь.

1 Ответ

0 голосов
/ 15 мая 2018

после просмотра официальных документов это можно решить следующим образом:
1. создайте свой индекс с типом соединения

put /product
     {
        "mappings":{
            "cata" : {
                "properties" : {
                     "join_field": { 
                          "type": "join",
                          "relations": {
                            "header": "line" 
                          }
                        }
                }
            }
        }
     } 
  1. создать данные заголовка

    сообщение / продукт

    {
        "p1":"1",
        "p2":"2",
        "p3":"3",
        "join_field":"header"
    }  
    

    возврат с "_id:" xxx "

  2. создать данные строки

post / cata? Routing = xxx (! Маршрутизация должна быть в заголовке '_id', как и в случае с 'parent' ниже)

{
    "p1":"1",
    "p2":"1",
    "p3":"1",
    "other":"others...",
    "join_field":{
        "name": "line",
        "parent": "xxx"
  }
}  

4. данные запроса
post / cata / _search
{ "query": { "has_parent" : { "parent_type" : "header", "query" : { "has_child" : { "type" : "line", "query" : { "term" : { "other" : "others..." } } } } } } }

способ, описанный выше, решает мою проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...