2014-04-25 59 views
0

下面是一個簡單的上下文:Elasticsearch - 自動完成與修正

curl -XPUT localhost:9200/testso -d '{ 
    "mappings": { 
    "person": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "index": "not_analyzed" 
     } 
     } 
    } 
    } 
} 

curl -XPUT 'http://localhost:9200/testso/person/1' -d '{ 
    "name" : "foo bar", 
    "context_id" : 1 
}' 

curl -XPUT 'http://localhost:9200/testso/person/2' -d '{ 
    "name" : "fou bar", 
    "context_id" : 1 
}' 

curl -XPUT 'http://localhost:9200/testso/person/3' -d '{ 
    "name" : "foo baz", 
    "context_id" : 2 
}' 

我正在尋找有關方法來幫助用戶以「正確」的寫作和自動完成它,在一個特定的背景。

Exemples,尋找背景1:

"foo bar" => [ "foo bar", "fou bar" ] 
"fou bar" => [ "foo bar", "fou bar" ] 
"foo"  => [ "foo", "fou", "foo bar", "fou bar" ] 
"fol"  => [ "foo", "fou", "foo bar", "fou bar" ] 

我已經測試了一些elasticsearch functionnalities ... suggest不採取"query"選項帳戶:

curl -XGET http://localhost:9200/testso/person/_search?search_type=count -d '{ 
    "query" : { "query_string": { "query": "context_id:2" } }, 
    "suggest": { 
    "text" : "foo baz", 
    "my_suggestion": { 
     "term" : { 
     "field" : "name" 
     } 
    } 
    } 
}' 

...返回建議「富bar「和」fou bar「,它屬於上下文1.

你對如何查詢elasticsearch返回事物有任何想法l這個嗎?一個具體的映射?其他功能性?一個特定的索引器?

回答

0

查詢選項未被考慮,因爲Elasticsearch使用FST來啓用前綴完成功能。這是一個非常快速的內存數據結構,並在1 ms內啓用建議。如果您要添加查詢或過濾器選項,則會減慢完成建議過程。

關於您的使用案例:他們在其API文檔中使用1.2.0版本發佈context suggester,這應該滿足您的需求。

在此期間,你可以實現一些walkarounds:

  • 創建的每一個CONTEXTID
  • 建議單獨的索引上下文信息添加到建議字段,也查詢: 的映射

    PUT /testo/person/_mapping{ 
    "properties": { 
        "name": { 
         "type": "string", 
         "index": "not_analyzed" 
        }, 
        "name_suggestion": { 
         "type": "completion" 
        } 
        } 
    }  
    

    定義可能的建議命中和輸出

    ​​

注意,完成建議者使用簡單的分析