使用字符串为Elasticsearch构建Query DSL

时间:2015-10-29 05:34:15

标签: elasticsearch

我正在使用Meteor(如Javascript,Node,NPM等),并希望为用户提供简单的文本输入,以便通过Elasticsearch进行搜索。我希望能够在文本上使用修饰符,如+和“”,并搜索特定的字段。我正在寻找可以将纯文本输入转换为Elasticsearch Query DSL的东西。

这些是一些示例查询:

此查询意味着关键字“tatooine”必须存在:

stormtrooper +tatooine

这意味着“死亡之星”应该是一个关键词:

stormtrooper "death star"

这将仅在类别字段中搜索关键字“bloopers”:

stormtrooper category=bloopers

是否有可以执行此操作的库?可以存在通用解决方案,还是这就是为什么我找不到任何现有的答案?

1 个答案:

答案 0 :(得分:0)

simple_query_string会支持您的查询语法,但category=bloopers除外,category:bloopers代替curl -XPOST localhost:9200/your_index/_search -d '{ "query": { "simple_query_string": { "query": "stormtrooper category:bloopers" } } }' curl -XPOST localhost:9200/your_index/_search -d '{ "query": { "simple_query_string": { "query": "stormtrooper +tatooine" } } }' ,否则它应该有效:

curl -XPOST localhost:9200/your_index/_search?q=stormtrooper%20%22death%20star%22"

您也可以直接在query string中发送查询:

for ($i = 0; $i < count($_POST['ItemID']); $i++) 
{
     $insertSQL = sprintf("INSERT INTO services (ItemID, JCard, CusID, Jcardid, ItemNo, PernNo, jcDescription) VALUES (%s, %s, %s, %s, %s, %s, %s)",

     GetSQLValueString($_POST['ItemID'][$i], "int"),
     GetSQLValueString($_POST['JCard'][$i], "int"),
     GetSQLValueString($_POST['CusID'][$i], "text"),
     GetSQLValueString($_POST['Jcardid'][$i], "text"),
     GetSQLValueString($_POST['ItemNo'][$i], "int"),
     GetSQLValueString($_POST['PernNo'][$i], "text"),  
     GetSQLValueString($_POST['JcDescription'][$i], "text");
}