簡體   English   中英

彈性搜索不使用Nest返回文檔

[英]Elastic-search not returning documents using Nest

我對ElasticSearch很新。

我無法使用ElasticSearch進行搜索,我嘗試了幾種方式,似乎沒有什么對我ElasticSearch

如果我對chrome使用sense chrome toolkit Sense擴展並查詢此GET /employee/_search?q=FirstName="Eldho"它工作正常。

我已經看了這個答案 ,也不適合我。

無法使用Nest進行搜索

    protected ElasticClient Client;
    IndexName index = "employee";

    public ElasticSearchRepository(Uri elasticServerUri)
    {
        var connection = new ConnectionSettings(elasticServerUri).DefaultIndex("employee");
        this.Client = new ElasticClient(connection);

    }

    //This is how i create Index
    public void CreateIndex()
    {

        var settings = new IndexSettings();
        settings.NumberOfReplicas = 1;
        settings.NumberOfShards = 1;

        var indexstate = new IndexState();
        indexstate.Settings = settings;


        Client.CreateIndex(index, g => g.Index(index)
              .InitializeUsing(indexstate)
              .Mappings(j => j.Map<Employee>(h => h.AutoMap(1))));

    }

    public List<Employee> Search(string search)
    {
        //All 3 searches are not wokring for me
        var response = Client.Search<Employee>(s => s
                             .AllIndices()
                             .AllTypes()
                             .From(0)
                             .Size(10)
                             .Query(q =>q
                             .Term(t => t.FirstName, "Eldho")));

        var result = Client.Search<Employee>(h => h
                            .Query(q => q
                                .Match(m => m.Field("FirstName").Query(search))));

        var result2 = Client.Search<Employee>(h => h
                     .Type("employee")
                     .Query(k => k
                     .Term(g => g.FirstName, "Eldho")));

        return result.Documents.ToList();
    }

請讓我知道我做錯了什么。

我在代碼中的任何地方都看不到你索引任何文檔,但我猜你已經索引了它們。

第一次搜索

    var response = Client.Search<Employee>(s => s
                         .AllIndices()
                         .AllTypes()
                         .From(0)
                         .Size(10)
                         .Query(q =>q
                         .Term(t => t.FirstName, "Eldho")));

因為您正在使用帶有"Eldho"term查詢,所以將不匹配,但是將使用.AutoMap()執行的字段的映射默認情況下將使用string字段上的標准分析器 ,其中包括小寫字母令牌。 如果您使用"eldho"更改為term查詢,我希望找到匹配項。

你的第二次搜索

   var result = Client.Search<Employee>(h => h
                        .Query(q => q
                            .Match(m => m.Field("FirstName").Query(search))));

將不匹配,因為默認情況下,NEST在索引,映射,搜索等時使用了屬性名稱。因此,POCO上名為FirstName的屬性將映射到該文檔類型的映射中名為firstName的字段。

你的第三次搜索

    var result2 = Client.Search<Employee>(h => h
                 .Type("employee")
                 .Query(k => k
                 .Term(g => g.FirstName, "Eldho")));

遇到與第一次搜索相同的問題。

在NEST中執行與您在Sense中發送的查詢匹配的查詢字符串查詢

client.Search<Employee>(s => s
    .Query(q => q
        .QueryString(qs => qs
            .Fields(f => f.Field(ff => ff.FirstName))
            .Query("Eldho")
        )
    )
);

如果您使用問題中的連接設置使用NEST索引文檔,那么這應該有效,盡管我在您的Sense查詢中注意到您使用"FirstName"字段獲得結果。 在NEST中更改字段推斷以使其不具有駝峰字段/屬性名稱,我們可以使用

var settings = new ConnectionSettings(elasticServerUri)
    .DefaultFieldNameInferrer(p => p);

var client = new ElasticClient(settings);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM