Вопросы о совместном запросе?

Используйте Elasticsearch для поиска productID a или (productID b и цена c) с помощью devp kibana. Это мой код: (что правильно?)

 GET my_store/products/_search
{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "productId":a
                    }},
                    {"match":{
                        "productId":b
                    }
                }
                ],
            "must":{
                "match":{
                    "price":c
                }
            }
        }
    }
}

person yx yao    schedule 23.06.2020    source источник
comment
Пожалуйста, помогите мне быстро!   -  person yx yao    schedule 23.06.2020
comment
Пожалуйста, прочитайте При каких обстоятельствах я могу добавить «срочно» или другие подобные фразы к моему вопросу, чтобы получить более быстрые ответы? - Подводя итог, можно сказать, что это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.   -  person Adrian Mole    schedule 23.06.2020
comment
@yx yao, можете ли вы добавить несколько примеров данных, по которым вы выполняете свой поисковый запрос?   -  person ESCoder    schedule 23.06.2020
comment
@yx yao у тебя была возможность просмотреть мой ответ?   -  person ESCoder    schedule 23.06.2020


Ответы (2)


Вы хотите productID of a or (productID of b and price of c). Это звучит как

productId=a OR (productId=b AND price=C)

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {"productID": "a"}
                },
                {
                    "bool": {
                        "must": [
                            {"match": {"productID": "b"}},
                            {"match": {"price": "c"}}
                        ]
                    }
                }
            ]
        }
    }
}

Вы рассматриваете ниже

OR = should AND = must

person Gibbs    schedule 23.06.2020
comment
Не могли бы вы проголосовать/принять/оба, если ответы полезны? - person Gibbs; 28.06.2020

Поскольку вы ничего не упомянули о данных, которые вы взяли, я проиндексировал следующие данные:

Пример данных индекса

{
   "productId":"a",
   "price": 100
}
{
   "productId":"b",
   "price": 200
}
{
   "productId":"c",
   "price": 300
}

Поисковый запрос:

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {"productId": "a"}
                },
                {
                    "bool": {
                        "must": [
                            {"match": {"productId": "b"}},
                            {"match": {"price": 700}}
                        ]
                    }
                }
            ]
        }
    }
}

Результат поиска:

"hits": [
         {
            "_index": "foo10",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.9808292,
            "_source": {
               "productId": "a",
               "price": 100
            }
         }
      ]

Здесь, поскольку нет данных, соответствующих productId: b и цене: 700`, в результатах поиска отображаются только данные с productId: a.

Вы можете просто рассматривать Must как эквивалент логического И, а should как логическое ИЛИ

Обратитесь к этому, чтобы узнать о Elasticsearch разница между MUST и SHOULD bool query и получить подробное объяснение Boolean Query, обратитесь к этому официальному документация

person ESCoder    schedule 23.06.2020
comment
Чем он действительно отличается от приведенного выше ответа? кроме выборочных данных. - person Gibbs; 23.06.2020
comment
@Gibbs Я также получил тот же поисковый запрос, что и вы, но в своем ответе я также добавил несколько примеров данных и несколько ссылок, которые, надеюсь, прояснят проблему. - person ESCoder; 23.06.2020