elasticsearch,Node.js,elasticsearch" /> elasticsearch,Node.js,elasticsearch" />

Node.js 功能评分不适用于节点js

Node.js 功能评分不适用于节点js,node.js,elasticsearch,Node.js,elasticsearch,我在elasticsearch中遇到了函数评分问题。当我试图从nodejs运行函数评分查询时,它总是给我错误信息 Trace: [illegal_argument_exception] request [/_search] contains unrecognized parameter: [query] at Logger.trace (/Users/rajeshjain/projects/search/logger.js:39:42) at elasticClient.inst

我在elasticsearch中遇到了函数评分问题。当我试图从nodejs运行函数评分查询时,它总是给我错误信息

Trace: [illegal_argument_exception] request [/_search] contains unrecognized parameter: [query]
    at Logger.trace (/Users/rajeshjain/projects/search/logger.js:39:42)
    at elasticClient.instance.search.then.catch.e (/Users/rajeshjain/projects/search/search/disc_cube_topic.js:117:28)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
试图运行它的节点js代码是

elasticClient.instance.search(query).then(eres => {
            // 3. reformat elasticsearch response and send to client.
            let response = {
                total: eres.hits.total,
                extracted: eres.hits.hits.length,
                results: []
            };
            elasticHitResult4DiscoverableTopicCubes(eres.hits.hits).then(results => {
                response.results = results;
                res.status(200).send(response);
            });
        })

它似乎给了我与函数查询使用的查询相关的错误…而当我在kibana上运行相同的查询时..它给了我适当的结果。

我自己解决了这个问题。区别是..来自nodejs的搜索api expect body作为请求的一部分..我在与原始的json有问题

{
"from": "0",
"size": "20",
"body": {
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "Devel",
                    "analyzer": "standard",
                    "fields": [
                        "topic_name",
                        "cube_name"
                    ]
                }
            },
            "script_score": {
                "script": {
                    "source": "Math.log1p(10*doc['num_cube_members'].value + 5*doc['message_count'].value + doc['num_topic_members'].value)"
                }
            }
        }
    }
}

}

虽然回答自己的问题很好,但你应该把它作为一个很好的答案,并解释更改内容和其他相关细节。事实上,很难很快看出它有什么不同。
{
"from": "0",
"size": "20",
"body": {
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "Devel",
                    "analyzer": "standard",
                    "fields": [
                        "topic_name",
                        "cube_name"
                    ]
                }
            },
            "script_score": {
                "script": {
                    "source": "Math.log1p(10*doc['num_cube_members'].value + 5*doc['message_count'].value + doc['num_topic_members'].value)"
                }
            }
        }
    }
}