2017-09-10 173 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

。 –