此問題的目標是解決有關在我的前端實施分面導航的問題。我在我的用戶界面中有一個輸入字段,允許用戶查詢所有字段/所有索引中的任何字詞(全文)。我還希望用戶能夠使用分面導航(例如過濾器)將結果配對。ElasticSearch - 跨所有字段搜索關鍵字,並使用過濾器對結果進行配對
例如,如果用戶搜索關鍵字「thomson」,則應搜索所有字段。然後,用戶將看到兩個(或更多)代表過濾器的複選框(比如'地理位置'和'組') - 這應該是一個AND過濾器。我試過以下ElasticSearch查詢無濟於事。
{
"query":{
"bool":{
"must": {
"multi_match": {
"query": "thomson",
"fields": ["*"]
}
},
"should":[
{
"terms":{
"geographicLocation": ["USA", "ENGLAND"]
}
},
{
"terms":{
"Group": ["AA", "BB"]
}
}
]
}
}
}
所以我們可以說我在ES下列文件:
{ name: 'Joe', street: '3 thomson st', geographicLocation: 'USA', Group: 'AA' }
{ name: 'Thomson': street: '1 york ave', geographicLocation: 'CHINA', Group: 'BB' }
{ name: 'Jane', street: '2 jones dr' geographicLocation: 'ENGLAND', Group: 'CC' }
首先,我應該只得到的結果有「湯姆遜」在附近的田野裏(例如,高於前兩個文檔) 。然後,應按照「USA」或「ENGLAND」以及「AA」或「BB」組的地理位置過濾這些地理位置。
因此,我希望文檔中帶有「thomson」的文檔中的某個地理位置位於美國或英格蘭的任何地方,並且要麼位於AA組中,要麼位於BB組中。這使我只有第一份文件。
我有一個不可能的時間管理上述ES params來獲得它的工作。
編輯:這是我的映射:
{
"person": {
"mappings": {
"TEST": {
"properties": {
"name": {
"type": "text"
},
"street": {
"type": "text"
},
"EndDate": {
"type": "long"
},
"EndDt": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Group": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"d3232b0e1b28bfb8b432a3459404676d:created_date": {
"type": "date"
},
"d3232b0e1b28bfb8b432a3459404676d:edited": {
"type": "date"
},
"geographicRegion": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
不知道爲什麼你不動這兩個條款應該的必須的內一? – Val
我查詢更新以下,似乎不給我任何命中: { \t 「查詢」:{ \t \t 「布爾」:{ \t \t \t 「必須」: \t \t \t \t { 「multi_match」:{ 「查詢」: 「湯姆森」, 「字段」:[ 「*」]}}, \t \t \t \t { 「術語」:{ 「geographicLocation」:[ 「美國」,「ENGLAND 「]}}, \t \t \t \t { 「條款」:{ 「組」: 「AA」, 「BB」]}} \t \t \t] \t \t} \t}} 能 – sags
你也分享你的索引的映射?我懷疑你的'geographicLocation'和'Group'字段是經過分析的字符串 – Val