我在使用Elasticsearch技术时遇到了麻烦。我想使用查询字符串在长文本中找到一个确切的值。
实施例: 如果我正在寻找“像我的狗”这样的术语,我希望能够找到包含“我喜欢我的狗和猫”的文件。
为此,我想将查询字符串与引号一起使用(因为我必须实现逻辑运算符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还检索内容中包含以下文本的文档:“我的狗很漂亮”,因为它匹配“我的狗”(包括标记化)。
我该如何克服这个问题?
提前感谢您的帮助。
答案 0 :(得分:0)
默认情况下,ElasticSearch使用标准分析器。使用此分析仪,停止词无法搜索。
使用 not_analyzed 参数,您无法将内容检索到您想要的句子中。
使用小写分析器设置关键字标记器,因此该字段标识为steam,因此无法搜索到所需的字段。
请使用空格标记器修改小写分析器。
应该解决你的问题。
BR
NicolasY