RavenDB 2 クライアントを使用しています。
ユーザーがカテゴリで検索して製品を返すことができるようにしたいと考えています。のカテゴリ名のHigh Heels
場合、ユーザーがheels
カテゴリの製品を検索して取得できるようにしますHigh Heels
。
CategoryName
次のように、インデックスにフィールドを設定しました。
Analyzers.Add(x => x.CategoryName, "SimpleAnalyzer");
のファセットを表示したいときに問題が発生しCategoryName
ます。ヒット 1を返す代わりに、ヒット 1 とヒット 1 をhigh heels
返します。high
heels
なぜこれを行っているのかを理解しており、次を使用してみました:
Stores.Add(x => x.CategoryName, FieldStorage.Yes);
しかし、ファセットで使用すると成功しません。
だから私の質問は、ファセットを使用するフィールドhigh heels
の代わりにhigh
返すにはどうすればよいですか?heels
SimpleAnalyzer
私のコードは以下です:
マイインデックス
public class ProductIndex : AbstractIndexCreationTask<Product,ProductIndex.ProductIndexItem>
{
public class ProductIndexItem
{
public string Name { get; set; }
public string CategoryName { get; set; }
}
public ProductIndex()
{
Map = products => from product in products
from category in product.Categories
select new
{
product.Name,
CategoryName = category.Name
};
Stores.Add(x => x.CategoryName, FieldStorage.Yes);
Analyzers.Add(x => x.CategoryName, "SimpleAnalyzer");
}
}
私のテスト
[Test]
public void MultiTermCategoryTest()
{
var product = new Product
{
Name = "MyProductName",
Categories = new List<Category>
{
new Category
{
Name = "High Heels",
}
}
};
_session.Store(product);
_session.SaveChanges();
var query = _session.Advanced.LuceneQuery<Product>("ProductIndex")
.WaitForNonStaleResults()
.Search("CategoryName", "heels");
var products = query.ToList();
var facets = query.SelectFields<Facet>("CategoryName").ToFacets("facets/ProdctFacets");
// Check that product has been returned
Assert.That(products.Count, Is.EqualTo(1), "Product count is incorrect.");
// Check that facet has been returned
Assert.That(facets.Results.Count, Is.EqualTo(1), "Facet Results count is incorrect");
var facetResult = facets.Results.FirstOrDefault();
// Check that factes are what I want
Assert.That(facetResult.Key, Is.EqualTo("CategoryName"));
// ** Fails here returning a count of 2**
Assert.That(facetResult.Value.Values.Count, Is.EqualTo(1), "Facet.Value.Values count is incorrect");
}