search - Elasticsearch 输入分析

标签 search elasticsearch full-text-search search-engine

Elastic Search可以将输入字符串拆分为分类的单词吗?即如果输入是

4star wi-fi 99$



并且我们正在搜索具有ES的酒店,是否有可能将此字符串分析/标记为4star - hotel level, wi-fi - hotel amenities, 99$ - price

是的,这是一个菜鸟问题:)

最佳答案

是的,没有。

默认情况下, query_string searches将与automatically created _all field一起使用。 _all字段的内容来自将所有字段按字面意义和天真的组合成单个分析字符串的方式。

因此,如果您具有“4星”评级,“wi-fi”便利设施和“99 $”价格,则所有这些值都将在_all字段内,并且您应该获得相应的点击率。例如:

{
  "level" : "4star",
  "amenity" : ["pool", "wi-fi"],
  "price" : 99.99
}

问题在于,如果没有客户端的努力,您将不知道在搜索_all时匹配了哪些字段。它不会告诉您每个值的来源明细,而只是报告确定整体相关性的分数。

如果您有某种方式了解每个术语(或多个术语)要搜索的字段,那么您可以自己轻松地做到这一点(不需要引号,但是最好避免空格错误)。这可能是您可以提供给上面链接的query_string查询的输入:
level:"4star" amenity:"wi-fi" price:(* TO 100)

您可以通过使用详细说明的查询来进一步使其复杂化:
{
  "query" : {
    "bool" : {
      "must" : [
        { "match" : { "level" : "4star" } },
        { "match" : { "amentiy" : "wi-fi" } },
        {
          "range" : {
            "price" : {
              "lt" : 100
            }
          }
        }
      ]
    }
  }
}

当然,最后两个请求将需要有关每个搜索词所引用内容的高级知识。您当然可以使用“99 $”中的$作为价格提示,而不是其他提示。我希望您不希望他们输入4星,而是选择一些复选框或其他基于表单的选择,所以这应该很现实。

从技术上讲,您可以创建一个自定义分析器来根据每个词的位置识别每个词,但这并不是一个好主意。

关于search - Elasticsearch 输入分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090993/

相关文章:

search - 没有搜索框按钮可以吗?

php - 显示来自 mySQL 数据库的结果...如何在 X 个结果后添加表?

elasticsearch - 通过查询更新:如果一项或多项不匹配,则包含多个语句的内联脚本ctx失败?

ruby - 在 ruby​​ 和 sinatra 中索引和搜索文本文件

javascript - 如何使用 JavaScript 查找 10 GB 或更大文件中的所有唯一单词并启用搜索?

javascript - 如何禁用图像谷歌自定义搜索引擎 cse 上的链接?

java - 如何从句子中的数组列表中获取首次出现的任何单词的索引

amazon-web-services - Amazon AWS Elasticsearch安装插件和文件

json - Elasticsearch 将用户输入存储为 JSON 文档

mysql - 如何在MySQL中为两个表创建FULLTEXT索引?