我正在尝试使用查询字符串查询来获取记录
我的搜索方案如下:
我必须搜索:"I Love my " AND (HTC OR Iphone OR Samsung)
我期待的结果如下:
我刚刚尝试了一些组合,但它不起作用
{
"query": {
"query_string": {
"default_field": "SearchContent",
"query": "\"I Love my\" AND (HTC OR Iphone OR Samsung)"
}
}
}
如何使用查询字符串执行此操作或者是否有其他选项,我被卡住了。 帮助我。
答案 0 :(得分:9)
查询取决于您的_mapping。如果您还没有定义任何,那么可能使用标准分析仪。 如果是这样,那么代币就是:
注意令牌是小写的。
查询字符串的正确格式为:
GET /yourindex/_search
{
"query": {
"query_string": {
"default_field": "SearchContent",
"query": "\"i love my\" AND (samsung OR htc OR iphone)"
}
}
}
答案 1 :(得分:0)
嗯,是的。您可以根据match_all查询和您感兴趣的过滤器,combinig和/或过滤器构建过滤的问题。在这里,您想要返回具有3个短语之一的文档。我假设你不想要“我爱我的蛋糕,我有一个iphone”才能回归。
所以,这样的事情(不知道它是否足够有效,艰难)。
{
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"or" : {
"filters" : [{
"fquery" : {
"query" : {
"query_string" : {
"query" : "\"I love my iphone\"",
"default_field" : "searchContent",
"default_operator" : "and"
}
}
}
},{
"fquery" : {
"query" : {
"query_string" : {
"query" : "\"I love my htc\"",
"default_field" : "searchContent",
"default_operator" : "and"
}
}
}
},
{
"fquery" : {
"query" : {
"query_string" : {
"query" : "\"I love my samsung\"",
"default_field" : "searchContent",
"default_operator" : "and"
}
}
}
}
]
}
}
}
}
答案 2 :(得分:0)
试试这个......
{
"query": {
"query_string": {
"default_field": "SearchContent",
"query": "I Love my *"
}
}
}
如果数据太大,外卡不能很好地扩展。但是,如果性能不是主要问题(数据量较少),这可能会有所帮助。
答案 3 :(得分:-2)
您可以使用以下查询字符串来搜索相同的内容。
{
"query_string" : {
"fields" : ["content", "my_field"],
"query" : "\"I love my \" HTC Iphone Samsung"
}
}
试试这个可以为你锻炼。或检查:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html