我在PHP中有一个城市列表,让我们说["慕尼黑","纽约",芝加哥和#34;]。
我想在弹性搜索中生成一个基本上是
的查询"SELECT * FROM job_ads WHERE city = Munich OR city = New York OR city = Chicago"
这样做的最佳方式是什么?
到目前为止https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html似乎是这项工作的最佳选择。但如果是这样,我可能需要一些语法帮助,我对弹性搜索很新。
答案 0 :(得分:0)
根据您提供的文件:您需要阅读标志部分。
{
"simple_query_string" : {
"query" : "Munich | New York | Chicago*",
"flags" : "OR"
}
}
即:还有更多的标志
因此,您可以使用json_encode
函数在php中创建此json。
示例:
<?php
$source = ['Munich', 'New York', 'Chicago'];
$search = [];
$search['simple_query_string']['query'] = implode(' | ', $source);
$search['simple_query_string']['flags'] = 'OR';
echo json_encode($search); // voila !
?>
提示是关于源+ implode
函数的数组的使用
答案 1 :(得分:0)
一种简单的方法就是像这样使用query string query。
{
"query": {
"query_string": {
"fields": ["city"],
"query": "Munich OR \"New York\" OR Chicago"
}
}
}
您必须使用 \&#34; 作为完整的phrase match,否则您将获得包含这两个单词中的任何一个的结果。
现在,如果您掌握了数据,那么编写此类查询的最佳方法是使用terms filter也可以cached,但您必须确保 city 字段为not analyzed。您可以详细了解已分析字段和未分析字段的含义here(向下滚动至为什么查询字词不匹配我的文档?)
之后你可以像这样使用术语查询
{
"query": {
"terms": {
"city": [
"New York",
"Chicago",
"Munich"
]
}
}
}