2017-09-10 60 views
0

我对Elasticsearch有点新,我想知道如何在特定的字段上对查询进行部分匹配。Elasticsearch - 如何从您的查询中进行部分匹配

可以说我有一个名为“部门”的字段,它有一个值“会计”。所以当我寻找像“会计”这样的东西时,我应该能够得到结果。

如: - 下面是我的两个文件:在球场上department

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

我的搜索查询是The accountingThe accounting department和我预期的结果应该是:

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

UPDATE:

@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" 
} 
+0

已经在这里回答:https://开头计算器。 com/questions/46261677/how-to-match-a-single-word-from-a-search-in-elasticsearch/46261842#46261842 –

回答

0

默认情况下Elasticsearch支持最好的ma tch方法和默认的布尔运算符是OR。这应该工作外的开箱即用的例如Query String查询,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

+0

我不认为你了解我。我有一个叫'department'的字段,我的查询就像'test accounting works',我应该得到预期的文件(在我的问题中提到)。也就是说,该字段中的值应与查询中的任何单词匹配。 – DOTNETFX

0

你试过匹配查询,这应该为你工作

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

不,我的查询就像是“会计”或“会计部门”。 因此,这将是这个样子: '{ “查询”:{ “匹配”:{ “部”:“会计部门” } }'和我期待着得到这样的结果这:'名字':“马特”, “部门”:“会计” }'。 – DOTNETFX

+1

如果'department'字段使用默认标准分析器映射为'text'数据类型,那么使用您的示例的'match'查询将起作用,您可以使用@DOTNETFX映射现场部门的映射 –

+0

。 –