4

我正在尝试使用Query String Query获取记录。
我的搜索方案如下:
我必须搜索如下:"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

4 回答 4

9

查询取决于您的 _mapping。如果您尚未定义任何内容,则可能使用了标准分析器。如果是这样,那么令牌是:

  • 我爱我的 HTC ->“我”、“爱”、“我的”、“HTC”
  • 我爱我的 Iphone -> “我”、“爱”、“我的”、“iphone”
  • 我爱我的三星 -> “我”、“爱”、“我的”、“三星”

注意标记是小写的。

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

GET /yourindex/_search
{
  "query": {
    "query_string": {
      "default_field": "SearchContent",
      "query": "\"i love my\" AND (samsung OR htc OR iphone)"
    }
  }
}
于 2014-09-17T10:37:37.893 回答
0

Try this...

{
  "query": {
            "query_string": {
                "default_field": "SearchContent",
               "query": "I Love my *"

            }
        }
}

Wild card doesn't scale well if the data is too large. But, this can be of some help if performance is not a major concern (less amount of data).

于 2013-08-30T12:14:50.750 回答
0

嗯,是。您可以使用您感兴趣的过滤器、组合和或或过滤器基于 match_all 查询构建过滤查询。在这里,您想要返回具有这 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"
                            }
                        }
                    }
                }
            ]
        }
    }
}

}

于 2013-08-28T09:00:47.813 回答
-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

于 2014-07-10T13:55:51.963 回答