如何在ElasticSearch中使query_string搜索精确短语

我在Elasticsearch中放了2个文档:

curl -XPUT "http://localhost:9200/vehicles/vehicle/1" -d'

{

"model": "Classe A"

}'

curl -XPUT "http://localhost:9200/vehicles/vehicle/2" -d'

{

"model": "Classe B"

}'

为什么此查询返回2个文档:

curl -XPOST "http://localhost:9200/vehicles/_search" -d'

{

"query": {

"query_string": {

"query": "model:\"Classe A\""

}

}

}'

而这个,只有第二个文件:

curl -XPOST "http://localhost:9200/vehicles/_search" -d'

{

"query": {

"query_string": {

"query": "model:\"Classe B\""

}

}

}'

我想elasticsearch以匹配我传递给查询参数的确切词组(带空格),该怎么做?

回答:

您需要查看的是正在使用的分析仪。如果您未指定,Elasticsearch将使用标准分析器。在大多数使用纯文本输入的情况下,它非常有用,但不适用于您提到的用例。

标准分析器将执行的操作是将字符串中的单词拆分,然后将其转换为小写字母。

如果要匹配整个字符串“ Classe A”并将其与“ Classe

B”区分开,则可以使用关键字分析器。这样会将整个字段保留为一个字符串。

然后,您可以使用匹配查询,该查询将返回您期望的结果。

创建映射:

PUT vehicles

{

"mappings": {

"vehicle": {

"properties": {

"model": {

"type": "string",

"analyzer": "keyword"

}

}

}

}

}

执行查询:

POST vehicles/_search

{

"query": {

"match": {

"model": "Classe A"

}

}

}

如果要使用query_string查询,则可以将运算符设置为AND

POST vehicles/vehicle/_search

{

"query": {

"query_string": {

"query": "Classe B",

"default_operator": "AND"

}

}

}

以上是 如何在ElasticSearch中使query_string搜索精确短语 的全部内容, 来源链接: utcz.com/qa/432909.html

回到顶部