Как отфильтровать по условию, когда попадание результата происходит из определенного поля в Elasticsearch? - PullRequest
0 голосов
/ 11 июня 2018

У меня есть запросasticsearch bool с несколькими предложениями must , объединяющими несколько запросов match для нескольких полей с различными значениями повышения.

скажем, у меня есть 5 полей:

productName / currency / country / identifierNumber

Я хочу условно отфильтровать свои результаты с помощью этой логики:

  • , если результаты (попадания) запроса bool будут получены из запроса на совпадение в поле ( productName ) затем Фильтр по валюте.

  • , если результаты (попадания) запроса bool будут получены из запроса на совпадение в поле ( identifierNumber ) затем Не фильтровать по валюте

    ОБНОВЛЕНИЕ

{
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "should": [
                        {
                            "multi_match": {
                                "query": "parameter",
                                "fields": [
                                    "productName.test^8",
                                    "productName.raw^4",
                                    "_all^2",
                                    "Zone^10",
                                    "category^12",
                                    "class^71"
                                ],
                                "fuzziness": "1",
                                "prefix_length": 1
                            }
                        },
                        {
                            "match": {
                                "productName.test": {
                                    "query": "parameter",
                                    "operator": "and",
                                    "fuzziness": "1",
                                    "prefix_length": 3,
                                    "boost": 1000
                                }
                            }
                        },
                        {
                            "match": {
                                "productName.raw": {
                                    "query": "parameter",
                                    "operator": "or",
                                    "fuzziness": "AUTO",
                                    "prefix_length": 3,
                                    "boost": 10
                                }
                            }
                        },
                        {
                            "match": {
                                "identifierNumber": {
                                    "query": "parameter",
                                    "boost": 3000
                                }
                            }
                        },
                        {
                            "term": {
                                "tic": {
                                    "value": "parameter",
                                    "boost": 30000
                                }
                            }
                        },
                        {
                            "match": {
                                "_all": {
                                    "query": "parameter",
                                    "operator": "or",
                                    "fuzziness": "1",
                                    "prefix_length": 2,
                                    "boost": 10
                                }
                            }
                        }
                    ]
                }
            },
            "functions": [
                {
                    "field_value_factor": {
                        "field": "productvalue"
                    }
                }
            ],
            "boost_mode": "multiply"
        }
    },
    "size": 30,
    "highlight": {
        "fields": {
            "*": {}
        },
        "require_field_match": false
    },
    "post_filter": {
        "bool": {
            "must": [
                {
                    "match": {
                        "countryName": "France"
                    }
                }]
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...