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

ElasticSearch:全文搜索不起作用

岳出野
2023-03-14

我使用的elasticsearch版本是ES2.2。我为全文搜索键入与官方教程相同的代码。(https://www.elastic.co/guide/en/elasticsearch/guide/current/match-query.html

看来全文对我不起作用。我的设定有什么问题?谢谢!
我键入的代码如下:

curl -XDELETE 'localhost:9200/my_index '
curl -XPUT 'localhost:9200/my_index ' -d '
{ 
 "settings": { "number_of_shards": 1 }
}'
curl -XPOST 'localhost:9200/my_index/my_type/_bulk' -d'
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }'

curl -XGET 'localhost:9200/my_index/my_type/_search' -d'
{
    "query": {
        "match": {
            "title": "QUICK!"
        }
    }
}'

返回的结果是:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

当我输入精确的查询时,我只能得到一次命中,该查询存储在索引中。

 curl -XGET 'localhost:9200/my_index/my_type/_search' -d'
 {
     "query": {
         "match": {
             "title": "The quick brown fox"
         }
     }
 }'

输出为:{“take”:1,“timed_out”:false,“_shards”:{“total”:1,“successed”:1,“failed”:0},“hits”:{“total”:1,“max_score”:1.4054651,“hits”:[{“_index”:“my_index”,“_type”:“my_type”,“_id”:“1”,“_score”:1.4054651,“_source”:{“title”:“The quick brown Fox”}}]}}

我也测试分析器:

curl -XGET 'localhost:9200/_analyze' -d'
{
  "analyzer": "standard",
  "text": "Text to analyze"
}'

curl:(6)无法解析主机“Get”{“token”:[{“token”:“text”,“start_offset”:0,“end_offset”:4,“type”:“”,“position”:0},{“token”:“to”,“start_offset”:5,“end_offset”:7,“type”:“”,“position”:1},{“token”:“analyze”,“start_offset”:8,“end_offset”:15,“type”:“”,“position”:2}]}

这个错误是否影响了结果?

共有1个答案

党佐
2023-03-14

现在没事了!问题是我没有为“title”索引设置“analyzer”。当我设置“分析器”,全文搜索工作!我不应该相信默认的分析器。

 类似资料:
  • 问题内容: 我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如: 如果soruce中有一个字符串,例如:“ ”,而当我的文本字符串如下:“ ”,“ ”,“ ” …时,它就起作用了。 但是,当我的realTimeTextIn字符串为“ ”时,全文搜索将不起作用。我搜索的单词不能超过一个。 我在

  • 我尝试在弹性搜索java api上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而不是与短语匹配。我的意思是,例如: 如果soruce中有一个字符串,如:“

  • Elasticsearch版本():5.2.2 JVM版本():1.8.0_121 OS版本(如果在类UNIX系统上):opensuse 使用“curl-xget'localhost:9200/_search?pretty&timeout=1ms'”进行搜索 响应部分为:{“Take”:5,“timed_out”:false,“_shards”:{“total”:208,“successed”:2

  • 回顾 在前面的章节(分页),我们已经加强了数据库查询,因此能够在页面上获取各种查询。 今天,我们会继续探讨数据库的话题,只是领域不同。所有存储内容的应用程序必须提供搜索能力。 许多其它类型的网站可能使用了谷歌、必应等索引所有的内容并且提供查询结果。这个对于大多数静态页面的网站,像论坛,是很好用。我们应用程序 microblog 的基本单元是用户短小的 blog,不是整个页面。我们希望搜索结果是动态

  • 问题内容: 我正在围绕ElasticSearch的管理客户端编写一个简单的Java包装器。为了测试它,我有一个主要方法,该方法首先检查索引是否存在(IndicesExistsRequest),如果存在则将其删除(DeleteIndexRequest),然后再次创建索引。请参见下面的代码。但是我一直得到IndexAlreadyExistsException。 顺便说一句,我正在尝试为您从命令提示符启

  • 我正在使用Lucene 8.2。Java11中的0。 我试图索引一个值,以便我可以使用范围查询过滤它,例如:。然而,任何变体,甚至,返回都会导致这个最小的示例。一旦我从其中删除使其成为,我就会得到结果。 所以我在想我一定是在索引上犯了一个错误,但是我不知道它可能是什么。 从JavaDoc: 用于快速范围过滤器的索引长字段。如果还需要存储该值,则应添加一个单独的StoredField实例。在搜索时查