2017-07-27 51 views
1

我敢肯定,這是一個愚蠢的問題,但...如何按ID搜索?

給出的以下指標

public class RandomIndex { 
    public int Id { get; set; } 
    public String name { get; set; } 
} 

如何通過標識做一個搜索?

我可以使用NEST按名稱進行搜索,但出於某種原因,Id搜索的功能無法迴避。我猜這是因爲它是一個結構化的領域?

以下是我正在使用的SearchRequest。請注意,我可以通過名稱成功查詢,而不是通過Id。

請注意,這是一個函數,我傳遞fieldName和searchTerm來尋找。

return new Nest.SearchRequest { 
    From = offset, 
    Size = 50, 

    Query = new Nest.SimpleQueryStringQuery() { 
     Query = $"\"{search}\"", 
     Fields = new Nest.Field[] { fieldName } 
    } 
}; 

有人能告訴我我做錯了什麼嗎?

回答

1

Id字段上搜索與在任何其他字段上搜索相同;與Id字段,它可能應該映射爲keyword type,在這種情況下該字段上的term query將工作。

,因爲NEST從一個POCO的Id財產推斷_id field映射到Elasticsearch類型和_id是在指數型獨特,就永遠只能爲Id一個匹配給定類型在給定的索引中。您可以簡單地使用GET API來獲取索引中給定ID的文檔,而不是針對Id進行搜索。如果您需要在不同的索引和類型中搜索id,那麼term查詢就是您要查詢的內容。

+0

我很明顯是ElasticSearch的新手,所以我試圖圍繞一切,包括底層的Lucene位。您提到的GET API看起來很完美,但問題是我不確定這是如何映射到.net NEST的東西。我明白我可以簡單地做一個捲曲或手動將這些請求放在一起。你有這方面的一些指導?我一直在發現這個問題,「低級」文檔解釋瞭如何做某些事情,但我不確定如何映射回實際的.Net API調用。這可能很明顯,但我正在經歷信息超載atm。 – Fred

+0

我得到了API,謝謝你的Russ。 – Fred

+0

'client.Get ()'或異步變體是你所追求的。客戶端上的方法名稱將與API名稱一致 –