【发布时间】:2016-12-26 14:40:35
【问题描述】:
我想在 elasticsearch 中编写一个查询,这样它只会给出字符串从特定单词开始的结果,例如,如果我要搜索,我现在有一个字符串“Donald Duck”和另一个字符串“Alan Donald”使用以下查询的“唐纳德”
"query": {
query_string: {
query: "Donald",
fields: ['character_name']
}
}
那么结果应该是“Donald Duck”而不是“Alan Donald”,因为在“Donald Duck”中它以“Donald”开头。现在谁能告诉我如何编写这样的查询,我搜索了很多帖子但没有找到任何解决方案。
编辑-1
我的映射如下所示
"settings": {
"index": {
"analysis": {
"analyzer": {
"simple_wildcard": {
"tokenizer": "whitespace",
"filter": ["lowercase"]
}
}
}
}
},
"mappings" : {
"college": {
"properties":{
"character_name" : { "type" : "string", "index": "analyzed", "analyzer": "simple_wildcard"}
}
}
}
【问题讨论】:
-
搜索“Donald”(末尾有空格)有用吗?
-
可能值得考虑如何构建数据。您应该根据您想要搜索的方式在 Elastic Search 中构建数据,在这种情况下,您可以将名字和姓氏拆分为单独的字段并仅搜索“first_name”字段。
-
对于“Donald”,结果必须是 Donald Duck,因为“Donald Duck”以“Donald”开头。
-
@NickG 没有匹配短语前缀,如果我搜索“DONALD”,它将返回两者,但感谢您的帮助。
标签: elasticsearch