我们在下面有一个文件。我无法在金融市场上搜索。但可以使用industry_icon_financialmarkets.png进行搜索。谁能告诉我原因是什么?
content是文本类型字段。
文档:
{
"title":"test",
"content":"industry_icon_financialmarkets.png"
}
查询:
{
"from": 0,
"size": 2,
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "\"industry_icon_financialmarkets.png\""
}
}
]
}
}
}
答案 0 :(得分:0)
文本字段的默认分析器为standard
,它不会使用industry_icon_financialmarkets
作为定界符将_
分解为标记。我建议您改用simple
分析器,当遇到非字母的字符时,它将把文本分成术语。
您还可以添加类型keyword
的子字段以保留原始值。
因此该字段的映射应为:
{
"content": {
"type": "text",
"analyzer": "simple",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
答案 1 :(得分:0)
在创建索引时,我们应该根据字段的类型对每个字段使用自己的映射,以获得预期的结果。
映射
PUT relevance
{"mapping":{"ID":{"type":"long"},"title":
{"type":"keyword","analyzer":"my_analyzer"},
"content":
{"type":"string","analyzer":"my_analyzer","search_analyzer":"my_analyzer"}},
"settings":
{"analysis":
{"analyzer":
{"my_analyzer":
{"tokenizer":"my_tokenizer"}},
"tokenizer":
{"my_tokenizer":
{"type":"ngram","min_gram":3,"max_gram":30,"token_chars":
["letter","digit"]
}
}
},"number_of_shards":5,"number_of_replicas":2
}
}
然后开始插入文档,
POST relevance/_doc/1
{
"name": "1elastic",
"content": "working fine" //replace special characters with space using program before inserting into ES index.
}
查询
GET relevance/_search
{"size":20,"query":{"bool":{"must":[{"match":{"content":
{"query":"fine","fuzziness":1}}}]}}}