当前位置: 首页 > 知识库问答 >
问题:

并非所有术语在ElasticSearch查询中都有效

洪飞扬
2023-03-14

当使用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个答案

亢建木
2023-03-14

标准分析仪

标准分析器是Elasticsearch使用的默认分析器。它是分析可能是任何语言的文本的最佳一般选择。它根据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" } } ] } } }'

这条线可能会有帮助

 类似资料:
  • CATALINA_OPTS=“-dcom.sun.management.jmxremote-dcom.sun.management.jmxremote.port=6969-dcom.sun.management.jmxremote.ssl=false-dcom.sun.management.jmxremote.authenticate=false${CATALINA_OPTS}” 并使用jcons

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我试图获取缺少字段“topic.description”和匹配项“fundedunder.programme”:“abc”的文档。 映射: 我的查询如下所示:

  • 问题内容: 我想替换所有我的Elasticsearch索引文档中的单个用户名。是否有API查询? 我尝试搜索多个但找不到。有人知道吗? 我的情况: 我在名为“ test”的索引中具有上述数据,并键入“ movies”。在这里,我想用“ alice”代替所有的“ bob”名称。 谢谢 问题答案: 通过查询更新是解决之道。 注意:请确保启用动态脚本,以使其起作用。

  • 问题内容: 在ElasticSearch中是否有可能形成可以保留术语顺序的查询? 一个简单的例子是使用标准分析器为这些文档建立索引: 你知道要搜索 你知道搜索 知道为您搜寻 我可以查询,这将返回所有文档,包括第三个文档。 如果我只想检索按此特定顺序排列有术语的文档怎么办?我可以构成一个查询吗? 考虑到仅通过引用文本即可获得短语:(检索第一和第二文档)在我看来,应该有一种方法可以保留不相邻的多个术语

  • 另外,类型中的所有文档都存储了上面提到的community的值。感谢帮助。