ElasticSearch — необязательные аргументы для ФИЛЬТРА?

#elasticsearch

#elasticsearch

Вопрос:

Я хочу сделать необязательный выбор для FILTER , поэтому, если я введу определенный термин, результат будет фильтроваться по нему, в противном случае соответствовать всему.

Вот мой пробный код :

  "filter" : { 
    "bool" : {
        "should" : [  
            { "terms" : { "item.brand" : [ "{{brand}}"] }} ,
            {"match_all":{}}
        ]
    }
  

Однако, когда я запускаю:

 {
        "id": "bipbip002",
        "params": {
            "query_all": "Table"
            "brand":""
        }
}
  

Я получил это:

 {
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "Unknown key for a START_OBJECT in [filter].",
                "line": 1,
                "col": 302
            }
        ],
        "type": "parsing_exception",
        "reason": "Unknown key for a START_OBJECT in [filter].",
        "line": 1,
        "col": 302
    },
    "status": 400
}
  

В настоящее время работает над версией 7el

ИНФОРМАЦИЯ О СОПОСТАВЛЕНИИ

           "item": {
                "properties": {
                    "brand": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }

"name": {
                            "properties": {
                                "en": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
  

Логика, лежащая в основе:
Имя элемента поиска, если пользователи нажимают на кнопку фильтра, отправляет API в существующий шаблон, аргумент фильтра которого является необязательным

Комментарии:

1. можете ли вы предоставить свое сопоставление индексов, образец и ожидаемые результаты, чтобы мы могли предоставить вам запрос, который может решить вашу проблему

Ответ №1:

Условные запросы (он же if … else) не поддерживаются непосредственно в elasticsearch DSL, вам нужно выполнить эту условную логику на вашем сервере приложений, который запускает запросы ES.

Пожалуйста, обратитесь к условному предложению в elasticsearch для получения дополнительной информации.

Комментарии:

1. Ссылка очень полезна, но я не понимаю, что такое {{#line_no}} ,

2. @ChauLoi, в официальном примере они взяли line_no поля типа int, и в этом поле, которое они создают range_query , это line_no не что иное, как поле в индексе примера

3. @ChauLoi пожалуйста, пройдите немного вверх по той же ссылке, и вы получите полный контекст

4. просто добавьте сопоставление, надеюсь, вы сможете привести пример для меня

5. @ChauLoi как упоминалось в документах, он не поддерживает формат JSON:(, и я не знаком со строковым синтаксисом, я могу попробовать, но это займет много моего времени, надеюсь, что кто-нибудь еще из сообщества сможет предоставить точный ответ, который вы ищете