【发布时间】:2016-06-16 16:09:12
【问题描述】:
我在使用 Elasticsearch 技术时遇到问题。我想使用查询字符串在长文本中找到一个确切的值。
示例: 如果我正在寻找“like my dogs”一词,我希望检索包含“I like my dogs and cats”的文档。
为此,我想使用带引号的查询字符串(因为我必须实现逻辑运算符 AND OR NOT):
{
"query_string" : {
"query" : "like my dogs"
}
}
我可能有一个糟糕的映射。这是要查询的字段的映射:
"settings":{
"analyzer": {
"default": {
"type": "custom",
"tokenizer": "standard",
"filter": ["asciifolding", "lowercase", "french_stemmer", "elision", "french_stop"]
},
"lowercase": {
"tokenizer": "keyword",
"filter": ["lowercase"]
}
},
"mappings": {
"content": {
"type": "string",
"fields": {
"raw": { "type": "string", "index": "not_analyzed" },
"custom": { "type": "string", "analyzer": "lowercase" }
}
}
}
这种映射的问题在于,Elasticsearch 还会检索内容中包含以下文本的文档:“my dog is beautiful”,因为它与“my dog”匹配(包括标记化)。
我该如何克服这个问题?
提前感谢您的帮助。
【问题讨论】:
-
如果您将字段设为“not_analyzed”,Elasticsearch 将返回准确的结果。
标签: elasticsearch