如何构建NodeJS变量以为ElasticSearch创建正则表达式查询

时间:2017-10-14 05:09:55

标签: node.js elasticsearch

我在一家曾经拥有控制网站的单片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子句然后传入?

0 个答案:

没有答案