ElasticSearch查询未返回确切的字符串

时间:2018-10-29 20:45:44

标签: elasticsearch

如何使查询仅返回“ Projeto de Lei”? 当前查询返回“ Projeto de Lei”和各种记录,例如“ Projeto de Lei X”,“ Projeto de Lei Y”,“ Projeto de Lei XYZ”等。

{
    "query" : {
    "query_string" : { 
        "query" : "monkey AND descricaoProposicao:Projeto+de+Lei", "default_operator": "AND"
    }
 }

}

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点:

使用分析仪

您需要的是为您的领域使用正确的分析仪。默认情况下,Elasticsearch使用Standard Analyzer,如果您希望将整个字符串存储为原字符串,则需要确保使用Keyword Analyzer

然后您可以使用简单的匹配查询。

POST <your_index_name>/_search
{
  "query": {
    "match": {
      "your_field_name": "Projeto de Lei" 
    }
  }
}

使用术语查询

或者,Elasticsearch为您提供数据类型keyword,该数据类型又使用了关键字分析器。

然后您可以使用Term Query。我提到的链接对此有很好的信息。

基本上,您的查询将采用以下格式,并且your_field_name的类型为关键字

POST <your_index_name>/_search
{
  "query": {
    "term": {
      "your_field_name": "Projeto de Lei" 
    }
  }
}

好吧,您也可以使用matchmatch_phrase,但要确保完全匹配,请确保在类型为keyword的字段上使用它。

POST <your_index_name>/_search
{
  "query": {
    "match_phrase": {
      "your_field_name": "Projeto de Lei" 
    }
  }
}

我建议为要查询的字段创建Multi-Field

通过这种方式,您既可以使用术语查询(完全匹配的推荐方法)来进行关键字(精确)搜索,又可以在文本字段中执行基于文本的简单搜索(返回的结果将是您当前正在观察的结果) 。

希望有帮助!