很好的一天!
我需要在 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": {},
},
},
}
如果查询包含引号中的数据,应该如何正确执行查询?
提前感谢您的回复!
暂无答案!
目前还没有任何答案,快来回答吧!