我正在基于ElasticSearch的网站上创建搜索,我对ElasticSearch很新,所以我很乐意为您提供帮助。
这是我的ElasticSearch内容的结构:
hits:
0:
_index: "mysite"
_type: "products"
_id: "1"
_score: 1
_source:
name:
0: "This is name"
number: "N6"
status: "Y"
这是我的Perl脚本:
my $e = Search::Elasticsearch->new();
my $results = $e->search(
index => 'mysite',
type => 'products',
size => 3,
body => {
query => {
match => { name => $query }
}
}
);
我想问你如何制作符合仅产品的脚本状态&#34; Y&#34; ,它应该找到一个< strong> substring 的名称,例如,如果$query
包含&#34;是&#34;,它应该找到该产品,因为该产品包含&#34;是&#34;在名称&#34;这是名称&#34;,最后一个,它也应该搜索数字,例如,如果$query
包含&#34; N6&#34;,它也应该找到那个产品。
这样的事情:(姓名或号码)和状态=&#34; Y&#34;
非常感谢。
更新
我将其重写为Perl语法,但我有语法错误:/
query => {
query_string => {
query => {
(name => $word OR number => $word) AND status => "Y"
}
}
}
错误:
-evalfile error: syntax error at (eval 215) line 33, near "} OR "\nGlobal symbol "$e" requires explicit package name at (eval 215) line 40.
答案 0 :(得分:1)
使用Query String Query尝试此查询。文档中还有很多其他选项。搜索某些关键字的能力取决于您设置的字段映射。
{
"query": {
"query_string" : {
"query" : "name:is AND (state:Y OR number:N6)"
}
}
}
您需要将整个query_string
查询视为字符串。所以查询看起来像这样:
my $e = Search::Elasticsearch->new();
my $results = $e->search(
index => 'mysite',
type => 'products',
size => 3,
body => {
query => "(name:$word OR number:$word) AND status:Y"
}
);
答案 1 :(得分:0)