并非所有术语都适用于 ElasticSearch 查询
Posted
技术标签:
【中文标题】并非所有术语都适用于 ElasticSearch 查询【英文标题】:Not all terms work in ElasticSearch Query 【发布时间】:2016-08-02 18:42:46 【问题描述】:使用https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html 所述的术语搜索时,我没有看到预期的结果
ElasticSearch 版本是 2.3.2:使用它来创建数据:
curl -XPUT http://myelastic:9201/myindex/mytype/90273504?pretty=true -d ' "CLIENT_ID" : "000000001", "USER_TYPE" : "ABC"'
curl -XPUT http://myelastic:9201/myindex/mytype/90273505?pretty=true -d ' "CLIENT_ID" : "000000002", "USER_TYPE" : "ABC"'
此查询显示两条记录:
curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" -d ' "query" : "match_all" : '
"took" : 2,
"timed_out" : false,
"_shards" :
"total" : 5,
"successful" : 5,
"failed" : 0
,
"hits" :
"total" : 2,
"max_score" : 1.0,
"hits" : [
"_index" : "myindex",
"_type" : "mytype",
"_id" : "90273505",
"_score" : 1.0,
"_source" :
"CLIENT_ID" : "000000002",
"USER_TYPE" : "ABC"
,
"_index" : "myindex",
"_type" : "mytype",
"_id" : "90273504",
"_score" : 1.0,
"_source" :
"CLIENT_ID" : "000000001",
"USER_TYPE" : "ABC"
]
此查询按预期显示一条记录:
curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
-d ' "query" : "bool" : "should" : [ "term" : "CLIENT_ID" : "000000001" ] '
但是使用不同的术语会导致没有记录:
curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
-d ' "query" : "bool" : "should" : [ "term" : "USER_TYPE" : "ABC" ] '
最终,我想根据多个术语的匹配对记录进行评分,从多个术语的选择开始,如下所示:
curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
-d ' "query" : "bool" : "should" : [ "term" : "CLIENT_ID" : "000000001" , "term" : "USER_TYPE" : "ABC" ] '
但现在我正试图理解为什么
curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
-d ' "query" : "bool" : "should" : [ "term" : "USER_TYPE" : "ABC" ] '
不返回任何记录。
【问题讨论】:
【参考方案1】:标准分析仪
标准分析器是默认分析器 弹性搜索使用。是分析文本的最佳通用选择 可以是任何语言。它在单词边界上拆分文本,如 由 Unicode 联盟定义,并删除了大多数标点符号。 最后,它将所有术语都小写。
https://www.elastic.co/guide/en/elasticsearch/guide/current/analysis-intro.html#_built_in_analyzers
尝试搜索小写文本。我认为它适用于数字,因为它们没有大小写。
curl -D - -o - http://myelastic:9201/myindex/mytype/_search?pretty=true -H"Accept: application/json" \
-d ' "query" : "bool" : "should" : [ "term" : "USER_TYPE" : "abc" ] '
This thread could help
【讨论】:
谢谢。我也去看看那个链接。你能总结一下你的答案为什么会这样吗? 我从文档中找到了完全的平静 太好了,谢谢。看起来我想要match
,而不是term
。以上是关于并非所有术语都适用于 ElasticSearch 查询的主要内容,如果未能解决你的问题,请参考以下文章