弹性搜索查询字符串查询

时间:2013-08-28 08:13:11

标签: elasticsearch

我正在尝试使用查询字符串查询来获取记录 我的搜索方案如下:
我必须搜索:"I Love my " AND (HTC OR Iphone OR Samsung)
我期待的结果如下:

  • 我爱我的HTC
  • 我爱我的Iphone
  • 我爱我的三星

我刚刚尝试了一些组合,但它不起作用

{
  "query": {
            "query_string": {
                "default_field": "SearchContent",
               "query": "\"I Love my\" AND (HTC OR Iphone OR Samsung)"
            }
        }
}

如何使用查询字符串执行此操作或者是否有其他选项,我被卡住了。     帮助我。

4 个答案:

答案 0 :(得分:9)

查询取决于您的_mapping。如果您还没有定义任何,那么可能使用标准分析仪。 如果是这样,那么代币就是:

  • 我爱我的HTC - > "我","爱","我"," htc"
  • 我爱我的Iphone - > "我","爱","我的"," iphone"
  • 我爱我的三星 - > "我","爱","我的"," samsung"

注意令牌是小写的。

查询字符串的正确格式为:

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