1

特定の用語でドキュメントを検索するのに苦労しています。私が行うたびに、結果はゼロになります。

コード例を次に示します。

var customers = new List<SampleCustomer>();
customers.Add(new SampleCustomer(){id=1,firstname="John", surname="Smith", country = "UK", sex = "Male", age=30});
customers.Add(new SampleCustomer(){id=2,firstname="Steve", surname="Jones",  country ="UK", sex = "Male", age=22});
customers.Add(new SampleCustomer(){id=3,firstname="Kate", surname="Smith",  country ="UK", sex = "Female", age=50});
customers.Add(new SampleCustomer(){id=4,firstname="Mark", surname="Jones",  country ="USA", sex = "Male", age=45});
customers.Add(new SampleCustomer(){id=5,firstname="Emma", surname="Jonson",  country ="USA", sex = "Female", age=25});
customers.Add(new SampleCustomer(){id=6,firstname="Tom", surname="Jones",  country ="France", sex = "Male", age=30});
customers.Add(new SampleCustomer(){id=7,firstname="Liz", surname="Web",  country ="France", sex = "Female", age=45});

foreach (var customer in customers)
{
    _elasticClient.DeleteById("sample", "SampleCustomers",customer.id);
    _elasticClient.Index(customer, "sample", "SampleCustomers" , customer.id);
}

このインデックスを使用して、クエリ文字列フィルターを使用して smith という名前の顧客をクエリできます

var queryByQueryString = _elasticClient.Search<SampleCustomer>(s =>
           s.From(0).Size(10).Type("SampleCustomers")
           .Query(q => q.QueryString(qs => qs.Query("Smith").OnField("surname"))));

しかし、ファイラーという用語を使用して顧客を検索しようとすると、結果はゼロになります

var queryByTerm = _elasticClient.Search<SampleCustomer>(s =>
            s.From(0).Size(10).Type("SampleCustomers")
            .Query(q => q.Term(p => p.surname, "Smith")));

何が間違っているのかわかりませんか?上記の例では、姓が「Smith」と完全に一致する結果のみがクエリで返されるようにし、「Smith Jones」などの 2 つの姓がある場合は結果に表示されないようにします。

4

1 に答える 1