elasticsearch查询字符串(全文搜索),无法搜索

时间:2018-12-20 11:01:29

标签: elasticsearch

我们在下面有一个文件。我无法在金融市场上搜索。但可以使用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\""
          }  
        }  
      ]  
    }  
  }
}

2 个答案:

答案 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}}}]}}}