如何在elasticsearch中实现查询字符串模式下的混合搜索类型?

uinbv5nw  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(0)|浏览(182)

很好的一天!
我需要在 query_string mode . 例如,要处理这样的搜索查询:
站起来闪耀“弗里曼先生”
在这种情况下,期望引用的短语被转换为具有完全相同的内容的标记,并且剩余的单词根据一般规则被转换为标记。
目前,一切都可以在没有引号的情况下工作,但是,如果查询包含引号中的短语,则执行查询时就好像根本没有引号,或者查询不产生任何结果一样。
我的俄语搜索设置如下(作为python词典):

INDEX_SETTINGS = {
    "settings": {
        "analysis": {
            "filter": {
                "ru_stop": {
                    "type": "stop",
                    "stopwords": [],
                },
                "ru_stemmer": {
                    "type": "stemmer",
                    "language": "russian",
                },
            },
            "char_filter": {
                "e_char_filter": {
                    "type": "mapping",
                    "mappings": ["Ё => Е", "ё => е"],
                },
            },
            "analyzer": {
                "e_ru": {
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "ru_stop",
                        "ru_stemmer",
                    ],
                    "char_filter": ["e_char_filter"],
                },
                "q_analyzer": {
                    "tokenizer": "keyword",
                    "filter": [
                        "lowercase",
                    ],
                    "char_filter": ["e_char_filter"],
                }
            },
        },
    },
    "mappings": {
        "properties": {
            "realid": {
                "type": "integer",
            },
            "timestamp": {
                "type": "date",
                "format": "dd.MM.yyyy HH:mm:ss",
            },
            "scale": {
                "type": "float",
            },
            "question": {
                "type": "text",
                "analyzer": "e_ru",
                "search_analyzer": "e_ru",
                "search_quote_analyzer": "q_analyzer",
            },
            "answer": {
                "type": "text",
                "analyzer": "e_ru",
                "search_analyzer": "e_ru",
                "search_quote_analyzer": "q_analyzer",
            },
        },
    },
}

这个 stopwords 清单单独填写。
我的问题是:

INDEX_SEARCH = {
    "from": 0,
    "size": 10,
    "query": {
        "function_score": {
            "query": {
                "query_string": {
                    "fields": ["question", "answer"],
                    "query": "rise and shine \"mister freeman\"",
                    "type": "cross_fields",
                    "default_operator": "and",
                    "analyzer": "e_ru",
                    "quote_analyzer": "q_analyzer",
                },
            },
            "functions": [{
                "field_value_factor": {
                  "field": "scale",
                  "factor": 1,
                  "missing": 1.0,
                },
            }],
        },
    },
    "sort": [],
    "highlight": {
        "pre_tags": ["<b>"],
        "post_tags": ["</b>"],
        "fields": {
            "question": {},
            "answer": {},
        },
    },
}

如果查询包含引号中的数据,应该如何正确执行查询?
提前感谢您的回复!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题