我有以下分析设置:
"settings" : { "index" : { "creation_date" : "1469213620697", "analysis" : { "filter" : { "stem_possessive_filter" : { "name" : "possessive_english", "type" : "stemmer" } }, "analyzer" : { "stem_analyzer" : { "filter" : [ "standard", "lowercase", "stem_possessive_filter" ], "tokenizer" : "standard" } } }, "number_of_shards" : "5", "number_of_replicas" : "1", "uuid" : "VQgaaZquQUOqKNYxGPH7cg", "version" : { "created" : "2020199" } } },
字符串类型的每个字段都具有以下映射:
"field_name" : { "type" : "string", "analyzer" : "stem_analyzer", "search_analyzer" : "standard" }
我希望能够用 老年痴呆 症 写 痴呆症 或用 老年痴呆症的 话写 痴呆 症 。因此,我想 在老年痴呆症中 获得 痴呆症 。
如果不使用所有物,则多匹配查询将不起作用:
{'query': {'multi_match': {'query': "dementia in alzheimer", 'type': 'phrase', 'fields': ['_all']}}}
但是,如果使用所有物,它就可以工作:
{'query': {'multi_match': {'query': "dementia in alzheimer's", 'type': 'phrase', 'fields': ['_all']}}}
另一方面,如果不使用所有物,则布尔查询有效:
{'query': {'bool': {'must': [{'match_phrase': {'Diagnosis': "dementia in alzheimer"}}]}}}
但是,如果使用所有物,则不起作用:
{'query': {'bool': {'must': [{'match_phrase': {'Diagnosis': "dementia in alzheimer's"}}]}}}
如何使以上所有查询正常工作?
-更新-
如果stem_analyzer在查询中添加布尔查询,则该查询有效。因此,您可以在搜索过程中使用它。无论是否拥有,我都会得到一个短语的结果。 mybody = {'query': {'bool': {'must': [{'match_phrase': {'Diagnosis': {'query': "dementia in alzheimer's", 'analyzer': 'stem_analyzer'}}}]}}}
stem_analyzer
mybody = {'query': {'bool': {'must': [{'match_phrase': {'Diagnosis': {'query': "dementia in alzheimer's", 'analyzer': 'stem_analyzer'}}}]}}}
但是,如果添加分析器,则多匹配查询将完全停止工作。无论是否拥有,我的短语都不会得到任何结果。 {'query': {'multi_match': {'query': "dementia in alzheimer's", 'type': 'phrase', 'analyzer': 'stem_analyzer', 'fields': ['_all']}}}
{'query': {'multi_match': {'query': "dementia in alzheimer's", 'type': 'phrase', 'analyzer': 'stem_analyzer', 'fields': ['_all']}}}
为什么分析器不能用于多重匹配查询?
该phrase类型不适用于词干分析器进行多重匹配查询。但是phrase_prefix输入有效。坦白地说,我不知道为什么。文档中没有任何提示。
phrase
phrase_prefix
因此,以下两个多匹配查询为我返回了相同的结果:
{'query': {'multi_match': {'query': "dementia in alzheimer", 'type': 'phrase_prefix', 'analyzer': 'stem_analyzer', 'fields': ['_all']}}}
{'query': {'multi_match': {'query': "dementia in alzheimer's", 'type': 'phrase_prefix', 'analyzer': 'stem_analyzer', 'fields': ['_all']}}}
在布尔查询中,match_phrase可与词干分析器一起使用。以下两个查询返回相同的结果:
match_phrase
{'query': {'bool': {'must': [{'match_phrase': {'Diagnosis': {'query': "dementia in alzheimer", 'analyzer': 'stem_analyzer'}}}]}}}
{'query': {'bool': {'must': [{'match_phrase': {'Diagnosis': {'query': "dementia in alzheimer's", 'analyzer': 'stem_analyzer'}}}]}}}