当前位置: 首页 > 面试题库 >

查询elasticsearch返回所有文档

冯和硕
2023-03-14
问题内容

我想知道为什么搜索特定术语会返回索引的所有文档,而不返回包含所请求术语的文档。

这是索引以及我的设置方法:(使用elasticsearch头插件浏览器界面)

{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1,
    "analysis": {
      "filter": {
        "dutch_stemmer": {
          "type": "dictionary_decompounder",
          "word_list": [
            "koud",
            "plaat",
            "staal",
            "fabriek"
          ]
        },
        "snowball_nl": {
          "type": "snowball",
          "language": "dutch"
        }
      },
      "analyzer": {
        "dutch": {
          "tokenizer": "standard",
          "filter": [
            "length",
            "lowercase",
            "asciifolding",
            "dutch_stemmer",
            "snowball_nl"
          ]
        }
      }
    }
  }
}

{
  "properties": {
    "test": {
      "type": "string",
      "fields": {
        "dutch": {
          "type": "string",
          "analyzer": "dutch"
        }
      }
    }
  }
}

然后我添加了一些文档:

{"test": "ijskoud"}
{"test": "plaatstaal"}
{"test": "kristalfabriek"}

因此,现在触发“ plaat”搜索时,人们会希望搜索会返回包含“ plaatstaal”的文档。

{
  "match": {
    "test": "plaat"
  }
}

但是为我节省了更多的搜索,elasticsearch会恢复所有文档的大小,无论其文本内容如何。我在这里想念什么吗?有趣的是:使用GET或POST时有所不同。尽管使用后者不会带来任何成功,但GET会返回所有文档。

任何帮助深表感谢。


问题答案:

您需要配置索引以使用自定义分析器:

PUT /some_index
{
  "settings": {
     ...
  },
  "mappings": {
    "doc": {
      "properties": {
        "test": {
          "type": "string",
          "analyzer": "dutch"
        }
      }
    }
  }
}

如果您有更多使用此分析器的字段,并且不想为每个分析器指定,则可以针对该索引中的特定类型执行以下操作:

  "mappings": {
    "doc": {
      "analyzer": "dutch"
    }
  }

如果希望该索引中的所有类型都使用自定义分析器:

  "mappings": {
    "_default_": {
      "analyzer": "dutch"
    }
  }

要以简单的方式测试分析仪:

GET /some_index/_analyze?text=plaatstaal&analyzer=dutch

这将是执行步骤的完整列表:

DELETE /some_index

PUT /some_index
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1,
    "analysis": {
      "filter": {
        "dutch_stemmer": {
          "type": "dictionary_decompounder",
          "word_list": [
            "koud",
            "plaat",
            "staal",
            "fabriek"
          ]
        },
        "snowball_nl": {
          "type": "snowball",
          "language": "dutch"
        }
      },
      "analyzer": {
        "dutch": {
          "tokenizer": "standard",
          "filter": [
            "length",
            "lowercase",
            "asciifolding",
            "dutch_stemmer",
            "snowball_nl"
          ]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "test": {
          "type": "string",
          "analyzer": "dutch"
        }
      }
    }
  }
}

POST /some_index/doc/_bulk
{"index":{}}
{"test": "ijskoud"}
{"index":{}}
{"test": "plaatstaal"}
{"index":{}}
{"test": "kristalfabriek"}

GET /some_index/doc/_search
{
  "query": {
    "match": {
      "test": "plaat"
    }
  }
}

搜索结果:

{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1.987628,
      "hits": [
         {
            "_index": "some_index",
            "_type": "doc",
            "_id": "jlGkoJWoQfiVGiuT_TUCpg",
            "_score": 1.987628,
            "_source": {
               "test": "plaatstaal"
            }
         }
      ]
   }
}


 类似资料:
  • 问题内容: 我在Elasticsearch中有一个小型数据库,出于测试目的,我想拉回所有记录。我正在尝试使用以下形式的网址… 有人可以给我您用来完成此操作的URL吗? 问题答案: 我认为支持lucene语法是这样的: 大小默认为10,因此您可能还需要获取10个以上的商品。(其中BIGNUMBER等于您认为大于数据集的数字) 但是,elasticsearch文档建议使用扫描搜索类型针对大型结果集。

  • 嗨,我是elasticsearch的新手,现在我索引了一个网站,我想用我的查询的单词获得文本摘录, 示例I索引 Lorem ipsum dolor sit amet,consectetur adipiscing Elit。Morbi nec odio在magna blandit porta quis a Nibh。整数sodales ex ut sagittis venenatis。Duis ef

  • 因为当我在查询中使用(From/Size)函数时,它不会返回我希望返回的文档。例如,我在elasticsearch中有5个文档,序列中的所有文档,_id1,_id2,_id3,_id4,id 5。 文档ID 5有单词(汽车),在查询中,我说要从ID 4中获取单词(汽车)(“来自”: 4,“大小”: 1,)它不返回ID 5,它有单词(汽车),但在查询中我把存在于doc 5中的信息,所以我应该带doc

  • elasticsearch实例的一些背景: 一个节点,在一台机器上 特定索引由大小为1.23TB的26亿文档组成 索引被分成4个碎片。 堆大小设置为30 GB 服务器有256GB内存和40个内核。 Elasticsearch(版本1.4.3)是这个服务器上唯一运行的东西 我想返回所有具有特定名称的文档。属性名称已映射为: 我尝试过使用不同类型的搜索;过滤器、查询字符串、术语。结果都一样。当前查询如

  • 问题内容: 我对.net中的elasticsearch客户端进行了一项小型研究,发现NEST是对此问题最受支持的解决方案之一。 我正在查看Nest的文档,但我找不到从查询输出原始json并避免将序列化为对象的方法,因为我在前端使用了angularJs,所以我不想重载该过程通过一些不必要的步骤将信息发送给客户端。 ......而且我还想知道如何覆盖序列化过程? 我发现NEST使用Json.NET,我

  • 日安: 我目前有以下结构索引<代码>学校- 谢了。