ElasticSearch.net Nest Match с Query не работает - PullRequest
0 голосов
/ 28 ноября 2018

Я использую библиотекуasticsearch.net для запроса ES.Столкнувшись с проблемой, связанной с поиском результатов. Добавлен скриншот, на котором показаны результаты моего поиска. Используется запрос im Kibana.

При попытке с использованием приведенного ниже кода результатов не получается.

var searchResponse = client.Search<Product>(s => s
.Index("products1")
.From(0)
.Size(10)
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("Duracarb 32 oz (907.2 g)")
)
)
);

Но когда япопробовал с приведенным ниже кодом, добавив match all, чтобы можно было успешно получить 10 продуктов.

var searchResponse = client.Search<Product>(s => s
.Index("products1")
.From(0)
.Size(10)
.Query(q => q
.MatchAll()
)
);

Ниже приведен полный код, который я использовал.

var uris = new[]
{
    new Uri(_searchSettings.EnableElasticURL),
    //new Uri("http://localhost:9201"),
    //new Uri("http://localhost:9202"),
};

var connectionPool = new SniffingConnectionPool(uris);
var settings = new ConnectionSettings(connectionPool)
    .DefaultIndex("products1");

var client = new ElasticClient(settings);
var searchRequest = new SearchRequest<Product>(Nest.Indices.All, Types.All)
{
    From = 0,
    Size = 10,
    Query = new MatchQuery
    {
        Field = Infer.Field<Product>(f => f.Name),
        Query = "Duracarb 32 oz(907.2 g)"
    }
};
var searchResponse = client.Search<Product>(s => s
.Index("products1")
            .From(0)
            .Size(10)
            .Query(q => q
     .Match(m => m.Field(f => f.Name).Query("Duracarb 32 oz (907.2 g)")))
    );
var stream = new System.IO.MemoryStream();
client.SourceSerializer.Serialize(searchResponse, stream);
var jsonQuery = System.Text.Encoding.UTF8.GetString(stream.ToArray());
var query = searchResponse.Documents;
var requestttt=searchResponse.DebugInformation;
//var query = GetProductQuery(searchQuery, null);
_logger.Debug("Search Response: "+query);

Please find the screenshot below of Kibana which has data related to my search keyword in code above.

1 Ответ

0 голосов
/ 28 ноября 2018

Измените, как имена полей выводятся из имен свойств POCO:

var settings = new ConnectionSettings(connectionPool)
    .DefaultFieldNameInferrer(n => n)
    .DefaultIndex("products1");

Теперь Infer.Field<Product>(f => f.Name) будет сериализовано в "Name", чтобы соответствовать имени поля в отображении индекса.

По умолчанию NEST имен POCO верблюдов , поэтому по умолчанию сериализуется в "name".

...