【问题标题】:Elastic search Query String Query弹性搜索查询字符串查询
【发布时间】:2013-08-28 08:13:11
【问题描述】:

我正在尝试使用 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)"
            }
        }
}

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

【问题讨论】:

  • 您的查询看起来正确。 mgm的答案(小写)可能是它。所以,检查你的分析仪。

标签: elasticsearch


【解决方案1】:

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

  • 我爱我的 HTC -> “i”、“love”、“my”、“htc”
  • 我爱我的 Iphone -> “i”、“love”、“my”、“iphone”
  • 我爱我的三星 -> “i”、“love”、“my”、“samsung”

注意标记是小写的。

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

GET /yourindex/_search
{
  "query": {
    "query_string": {
      "default_field": "SearchContent",
      "query": "\"i love my\" AND (samsung OR htc OR iphone)"
    }
  }
}

【讨论】:

    【解决方案2】:

    嗯,是的。您可以使用您感兴趣的过滤器、组合和/或过滤器基于 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"
                                }
                            }
                        }
                    }
                ]
            }
        }
    }
    

    }

    【讨论】:

    • 感谢您的回复。但是我没有提到的固定值。查询可能是这样的:“\”我有自己的\”和(笔记本电脑或自行车或菜刀)”当我浏览各种帖子时,他们建议使用“查询字符串查询”来转换它进入我们通过的布尔逻辑,但在这里我没有得到那个输出。谢谢,阿尼鲁达
    【解决方案3】:

    试试这个...

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

    如果数据太大,通配符无法很好地扩展。但是,如果性能不是主要问题(数据量较少),这可能会有所帮助。

    【讨论】:

    • 这并不能真正回答问题,是吗?
    【解决方案4】:

    您可以使用以下查询字符串进行搜索。

    {
        "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

    【讨论】:

    • 默认情况下,所有术语都是 OR 连接的。因此,此搜索不一定包含“我爱我的”。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多