【问题标题】:How to fetch particular documents in elasticsearch index如何在弹性搜索索引中获取特定文档
【发布时间】:2019-09-26 20:32:32
【问题描述】:

我想获取对应特定字段的所有数据,并有弹性搜索的响应。

{
"took": 2,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
},
"hits": {
    "total": {
        "value": 35,
        "relation": "eq"
    },
    "max_score": 0.44183275,
    "hits": [
        {
            "_index": "allevents",
            "_type": "_doc",
            "_id": "jQPDaG0BcOh3oggcguoV",
            "_score": 0.44183275,
            "_source": {
                "category": "sessions",
                 "contentid": "KqRLj2lWZ3",
                "clientname": "omkarpathlab",
------------------
}]

我试过搜索功能它返回一个错误。

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
    host: 'aaa',
    log: 'trace',
    apiVersion: '7.1'
});

client.search({
    "size": 20,
    "query": {
        "query_string": {
        "default_field": "clientname",
        "query": "omkarlab"
        }
    }
     }).then((res) => {
        console.log("resultData", res);
    }, (err) => {
        console.log("err", err);
    });
enter code here

显示错误:

{ 错误:[illegal_argument_exception] 请求 [/_search] 包含无法识别的参数:[query]

请建议我如何解决此类问题。

【问题讨论】:

  • 什么错误?
  • 错误:[illegal_argument_exception] 请求 [/_search] 包含无法识别的参数:[query]
  • 您使用的是最新版本的 elasticsearch 客户端吗?根据最新文档,您不应在 json elastic.co/guide/en/elasticsearch/client/javascript-api/current/… 中传递查询对象
  • @mkalsi 我正在使用最新版本。你能告诉我如何传入查询对象

标签: javascript node.js elasticsearch


【解决方案1】:

您应该在default_field 下指定您的字段,而不是您要查找的值。在您的情况下,您尝试查询的字段是clientname,而您要查找的值是omkarpathlab。所以你的查询应该如下:

"query": {
    "query_string": {
    "default_field": "clientname",
    "query": "omkarpathlab"
    }
}

编辑。但是您在 body 属性中的查询:

client.search({
  "size": 20,
  "body": {
    "query": {
      "query_string": {
        "default_field": "clientname",
        "query": "omkarlab"
      }
    }
  }
}).then((res) => {
  console.log("resultData", res);
}, (err) => {
  console.log("err", err);
});

【讨论】:

  • @RahulSaini 您能否将确切的错误添加到您的原始帖子中?
  • 当我使用它时它会返回结果 >client.search({ index: 'allevents', }).then((res) => { console.log("resultData", res); }, (err) => { console.log("err", err); });但不知道如何通过查询过滤器。
  • @RahulSaini 我认为你必须将你的查询放在正文中,你能检查我的更新回复吗。
【解决方案2】:

您可以使用以下代码连接到 elasticsearch。我已经在 5.6 版本上测试过了

'use strict'

const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://XXX:9200' })

async function run () {
  // Let's search!
  const { body } = await client.search({
    index: 'XXX',
    type : 'XXX',
    body: {
      query: {
       match_all: {}
      }
    }
  })

  console.log(body.hits.hits)
}

run().catch(console.log)

代码是来自https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/search_examples.html 站点的示例。

对于搜索文档,请查看以下链接 https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_search

【讨论】:

  • 我通过 npm 命令安装了 elasticsearch,所以它显示“elasticsearch”:“^16.4.0”
猜你喜欢
  • 1970-01-01
  • 2015-12-18
  • 2020-09-07
  • 1970-01-01
  • 2023-03-05
  • 2017-02-28
  • 1970-01-01
  • 2016-10-08
  • 2016-02-13
相关资源
最近更新 更多