0

私は ElasticSearch と NEST の両方に慣れていないので、初心者であることを許してください。実装中の .NET ソリューションで ElasticSearch を評価するためのプロトタイプに取り組んでいます。プロトタイプはコンパイルされ、検索しているように見えますが、結果が正しく返されません。小文字のみのいくつかのキーワードの結果のみを返し、他のものは無視して何も返しません。クエリに何か問題があると思います。クエリ部分は次のとおりです (接続情報とデフォルトのインデックスが指定され、構築されていると仮定します)。

// string searchString to be searched against ProductName and Description fields.            
var searchResults = client.Search<Product>(s=>s
            .From(0)
            .Size(100)
            .Query(q=>q.Term(p=>p.ProductName, searchString) || 
                q.Term(p=>p.Description, searchString)
            ));

必要に応じて、モデルを次に示します。

[ElasticType(IdProperty = "ProductID")]
public class Product
{
    [ScaffoldColumn(false)]
    [JsonIgnore]
    public int ProductID { get; set; }

    [Required, StringLength(100), Display(Name = "Name")]
    public string ProductName { get; set; }

    [Required, StringLength(10000), Display(Name = "Product Description"), DataType(DataType.MultilineText)]
    public string Description { get; set; }

    public string ImagePath { get; set; }

    [Display(Name = "Price")]
    public double? UnitPrice { get; set; }

    public int? CategoryID { get; set; }
    [JsonIgnore]
    public virtual Category Category { get; set; }
}

助けてくれてありがとう!

4

1 に答える 1

2

ここでの問題は、分析されていないため大文字と小文字が区別される用語クエリを使用していることです。

代わりに、(分析される)一致クエリを使用してみてください。

var searchResults = client.Search<Product>(s => s
    .From(0)
    .Size(100)
    .Query(q => 
        q.Match(m => m.OnField(p => p.ProductName).Query(searchString)) || 
        q.Match(m => m.OnField(p => p.Description).Query(searchString))
     )
);

さらに一歩進んで、2 つの異なるフィールドで同じテキストをクエリしているため、2 つの用語クエリを組み合わせる代わりに、複数一致クエリを使用できます。

var searchResults = client.Search<Product>(s => s
    .From(0)
    .Size(100)
    .Query(q => q
        .MultiMatch(m => m
            .OnFields(p => p.Product, p => p.Description)
            .Query(searchText)
        )
     )
);

分析をよりよく理解するには、The Definitive Guideのマッピングと分析のセクションをお読みください。

于 2014-08-28T03:43:16.157 に答える