【问题标题】:Elasticsearch - How to do a partial match from your queryElasticsearch - 如何从您的查询中进行部分匹配
【发布时间】:2018-02-18 17:04:11
【问题描述】:

我对 Elasticsearch 有点陌生,我想知道如何对特定字段的查询进行部分匹配。

假设我有一个名为“部门”的字段,它的值是“会计”。因此,当我搜索“会计”之类的内容时,我应该能够得到结果。

例如:- 以下是我的两个文件:

{
   "name": "Joe",
   "department": "finance"
},
{
   "name": "Matt",
   "department": "accounting"
}

我在department 字段上的搜索查询是The accountingThe accounting department,我的预期结果应该是:

{
   "name": "Matt",
   "department": "accounting"
}

更新:

@Russ Cam:标准分析器会删除所有标点符号和特殊字符,所以如果我将字段部门中的值保存为 dept/accounting 并且当我搜索 dept: the dept/accounting 时,我应该得到那些具有部门的文档值为dept/accounting

当有人搜索 deptaccounting 时,我不希望 ES 向我提供部门为 dept/accounting 的文件。这可能吗?

假设以下是我在ES中的文档:

{
   "name": "Matt",
   "department": "dept/accounting"
},
{
   "name": "Kate",
   "department": "dept"
},
{
   "name": "Adam",
   "department": "accounting"
}

用户搜索dept,得到:

{
  "name": "Kate",
  "department": "dept"
}

当用户搜索blah blah dept/accounting blah 时,他应该只得到这个:

{
   "name": "Matt",
   "department": "dept/accounting"
}

【问题讨论】:

标签: c# elasticsearch kibana elasticsearch-net nosql


【解决方案1】:

默认情况下,Elasticsearch 支持最佳匹配方法,默认布尔运算符为 OR。这应该可以开箱即用,例如 Query String 查询,请参阅 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

【讨论】:

  • 我不认为你理解我的意思。我有一个名为department 的字段,我的查询类似于test accounting works,我应该得到预期的文档(在我的问题中提到)。也就是说,字段中的值应该匹配查询中的任何单词。
【解决方案2】:

您是否尝试过匹配查询,这应该适合您

{
  "query": {
    "match": {
      "department": "accounting"
    }
  }

【讨论】:

  • 不,我的查询类似于The accountingThe accounting department。所以它看起来像这样:{ "query": { "match": { "department": "The accounting department" } },我期待得到这样的结果:{ "name": "Matt", "department": "accounting" }
  • 发布您的现场部门映射
  • @DOTNETFX 如果使用默认标准分析器将department 字段映射为text 数据类型,则使用您的示例进行match 查询将起作用。
  • 你们可以检查我更新的问题吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2016-08-12
  • 2012-11-15
  • 2018-11-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多