2015-11-04 52 views
1

Elasticsearch中可以有簡單的自動完成功能嗎?Elasticsearch中的簡單自動完成

我需要在搜索輸入中輸入單詞的開頭,並且我想要elasticsearch查找以它開頭的所有單詞。我想Elasticsearch在我的類型的所有領域(Post包含Title,Body,Tags)搜索。

this example我需要添加特殊的建議字段,即TitleSuggest,BodySuggest等,並指定輸入和輸出邏輯。

它還返回一個Posts列表,而我只需要單詞。

+0

你看過這個嗎? http://stackoverflow.com/questions/16411963/elasticsearch-an-edgengram-for-autocomplete-typeahead-is-my-search-analyzer-bei –

回答

0

從我的理解,我將這樣做:

{ 
    "query" : { 
     "dis_max" : { 
      "tie_breaker" : 0, 
      "boost" : 1, 
      "queries" : [{ 
        "wildcard" : { 
         "title" : "searchme*" 
        } 
       }, { 
        "wildcard" 
        : { 
         "body" : "searchme*" 
        } 
       }, { 
        "wildcard" : { 
         "tags" : "searchme*" 
        } 
       } 
      ] 
     } 
    }, 
    "aggs" : { 
     "title" : { 
      "terms" : { 
       "field" : "title", 
       "size" : 10 
      } 
     }, 
     "body" : { 
      "terms" : { 
       "field" : "body", 
       "size" : 10 
      } 
     }, 
     "tags" : { 
      "terms" : { 
       "field" : "tags", 
       "size" : 10 
      } 
     } 
    } 
} 

它搜索所有DATAS與領域「searchme」開頭:標題,正文,標籤和返回的10項爲每個列表。

這裏還自動完成彈性,但我從來沒有用它了: https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html

0

據彈性問題跟蹤一個帖子,也許你應該嘗試這樣的查詢:

.Query(q => 
    q.Text(tq => tq            
    .OnField(t => t.MyField1.Suffix("autocomplete")) 
    .QueryString(searchString) 
)      
    && q.Text(tq => tq            
    .OnField(t => t.MyField2.Suffix("autocomplete")) 
    .QueryString(searchString) 
)  
) 

更多信息: https://github.com/elastic/elasticsearch-net/issues/456

相關問題