【问题标题】:How to do full text search matching on partial Elasticsearch queries如何对部分 Elasticsearch 查询进行全文搜索匹配
【发布时间】:2019-10-20 00:16:18
【问题描述】:

我将 Elasticsearch 与 Laravel 结合使用,我实现了所有功能,并且它适用于上面代码中的简单匹配查询。

'body' => [
                "query" => [
                       "bool" => [
                           "should" => [
                            ["regexp" => [
                               "tags" => [
                                   "value" => ".{2,8}" . $query . ".*",
                            ]
                            ],
                                ],
                            ["wildcard" => [
                               "tags" => [
                                   "value" => "*" . $query . "*",
                                   "boost" => 1.0,
                                   "rewrite" => "constant_score"
                                    ]
                                ]
                            ]
                        ]],
                    ], "highlight" => [
                    "fields" => [
                        "tags" => ["type" => "plain"]
                    ]
                ]
          ]

我收到了很好的结果,例如查询“java”我收到了“javascript”和“nativjavascript”但问题在于接收结果是短语。

我想输入查询“java react”并希望收到以下结果: “java”,“javascript”,“javascript reactjs”,“reactjs”,“react”,“nativjavascript”。

【问题讨论】:

标签: laravel elasticsearch


【解决方案1】:

我不熟悉 Laravel,因此无法为您提供确切的语法,但可以告诉您方法以及我如何在我的应用程序中解决这个用例。

  1. 在您的可搜索字段上创建一个基于 n-gram 的分析器,该分析器将根据您配置的 n-gram 拆分标记。
  2. 根据space 拆分您的搜索词,在您的情况下为java react,应拆分为两个搜索词javareact
  3. 在搜索字段中使用关键字分析器作为search_time 分析器。

【讨论】:

  • 阿米特,您能否发送您对 elasticsearch 的查询
  • @lmediasun:我通常不鼓励 Amit “向您发送查询”。它可能没有那么简单 - 这个答案非常好,因为它已经为你做了一些研究。对您而言,最好的下一步是研究一些想法,以通过新的个人努力推动自己前进。
  • 如果您可以根据您的具体用例研究您喜欢的方向,如果它是微不足道的,您可以在此线程中添加一个小的后续问题。但是,您选择的方向可能会产生一个与此完全不同的新问题,此时您可以接受 Amit 的回答,并提出一个新的单独问题。我鼓励你寻求帮助,但只有当你在每个新的关头真正用尽了自己的研究能力时——这就是我们作为工程师的改进方式。
  • @lmediasun:我不明白你的问题(如果你想让我看到你的消息,你需要使用@halfer ping 我)。
  • @Imediasun,对不起,但这不是 SO 的工作方式,这不是我可以或我认为这里的任何人都会为您编写的一小段代码。我已经指出了你正在做的错误和设计来解决这个问题,另一位经验丰富的 stackoverflow(SO) 用户也对此表示赞赏,你直接要求实施违反 SO 政策meta.stackoverflow.com/questions/277139/… .. 我们花时间帮助其他人,但不是在这里做他们的办公室工作或家庭作业,接受和支持帮助其他用户找到好的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多