我在一家曾经拥有控制网站的单片PHP / MySQL CMS的公司工作,但我们现在正试图让网站从我们的API而不是直接从MySQL中提取数据。 API只是AWS上的ElasticSearch。我写了一些代码,现在将我们的数据从MySQL移动到ElasticSearch。现在我可以通过像这样的卷曲调用获得我想要的数据:
curl --verbose -d '{"from" : 0, "size" : 10000, "query": { "bool": { "should": [ { "regexp": { "string-of-words-associated-with-this-document": { "value": ".*steel.*" } } }, { "regexp": { "string-of-words-associated-with-this-document": { "value": ".*services.*" } } } ] } } }' -H 'Content-Type: application/json' -X GET "https://search-sameday01-ntsw7b7shy3wu.us-east-1.es.amazonaws.com/crawlers/_search?pretty=true"
这很有效。 ElasticSearch中的每个文档都有一个字段,其中包含我们要查询的单词,并使用regexp查询匹配该字段。
现在我正在编写一个新的应用程序,用于检查来自我们的网络抓取工具的数据,并查看我们的数据库中是否已有某些名称。新的应用程序是NodeJS应用程序,所以我决定使用这个库:
https://github.com/elastic/elasticsearch-js
我需要构建可能有很多regexp子句,所以我进入循环并在数组中构建了许多子句:
array_of_elasticsearch_clauses_should_match.push( { "regexp": { "string-of-words-associated-with-this-document": { "value": ".*" + word_sanitized + ".*" } } } );
所以我想我可以像这样传递这个变量:
es_client.search({
index: 'crawlers',
type: 'sameday',
body: {
query: {
bool: {
should: array_of_elasticsearch_clauses_should_match
}
}
}
}).then(function (resp) {
但是我收到了这个错误:
Trace: [parsing_exception] [array_of_elasticsearch_clauses_should_match] query malformed, no start_object after query name, with { line=1 & col=75 }
如何在变量中构建regexp子句然后传入?