使用Elasticsearch进行布尔查询

问题描述 投票:0回答:1

我当前正在使用以下查询-

{
    "_source": [
        "title",
        "bench",
        "id_",
        "court",
        "date",
        "content"
    ],
    "size": 15,
    "from": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "multi_match": {
                        "query": "the",
                        "fields": [

                            "content"
                        ], "operator": "and"
                    }
                },

            ],
            "should": {
                "multi_match": {
                    "query": "the",
                    "fields": [
                        "content.standard^2"
                    ], "operator": "and"
                }
            }
        }
    }
    ,
    "highlight": {
        "pre_tags": [
            "<tag1>"
        ],
        "post_tags": [
            "</tag1>"
        ],
        "fields": {
            "content": {}
        },
        "fragment_size": 100
    }
}

具有以下映射

{
    "courts_2": {
        "mappings": {
            "properties": {
                "author": {
                    "type": "text",
                    "analyzer": "my_analyzer"
                },
                "bench": {
                    "type": "text",
                    "analyzer": "my_analyzer"
                },
                "citation": {
                    "type": "text"
                },
                "content": {
                    "type": "text",
                    "fields": {
                        "standard": {
                            "type": "text"
                        }
                    },
                    "analyzer": "my_analyzer"
                },
                "court": {
                    "type": "text"
                },
                "date": {
                    "type": "text"
                },
                "id_": {
                    "type": "text"
                },
                "title": {
                    "type": "text",
                    "fields": {
                        "standard": {
                            "type": "text"
                        }
                    },
                    "analyzer": "my_analyzer"
                },
                "verdict": {
                    "type": "text"
                }
            }
        }
    }
}

我的分析仪是Metaphone分析仪。这是我的目标。我希望完全匹配(标准)首先出现,然后是语音匹配。我能够用代码实现。我非常确定其中有一些不需要的逻辑,如果有人可以指出它,我将深表感谢。

另外,我想加入的是搜索逻辑,用户可以在其中输入搜索内容,例如

[皇家马德里和巴塞罗那或曼联。在这里,我希望包含皇家马德里和Barcelona / Man Utd /的所有文档,如何使用已有的当前查询(经过修改)实现?

elasticsearch elasticsearch-plugin elasticsearch-query
1个回答
0
投票

我在您的查询中看不到任何副作用。关于您的搜索逻辑,最简单的方法可能是使用query string query。默认情况下,它支持布尔运算符,因此您的查询可能如下所示:

{
    "_source": [
        "title",
        "bench",
        "id_",
        "court",
        "date",
        "content"
    ],
    "size": 15,
    "from": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "query_string" : {
                        "query" : "Real Madrid AND Barcelona OR Manchester United",
                        "default_field" : "content",
                        "operator": "and"
                    }
                }
            ],
            "should": {
                "query_string" : {
                    "query" : "Real Madrid AND Barcelona OR Manchester United",
                    "default_field" : "content.standard",
                    "boost": 2,
                    "operator": "and"
                }
            }
        }
    },
    "highlight": {
        "pre_tags": [
            "<tag1>"
        ],
        "post_tags": [
            "</tag1>"
        ],
        "fields": {
            "content": {}
        },
        "fragment_size": 100
    }
}

否则,您将不得不解析查询并使用多个布尔查询对运算符建模。

© www.soinside.com 2019 - 2024. All rights reserved.