根据Ayende的这篇文章,我创建了以下索引定义
public class ProductsSearch : AbstractIndexCreationTask<Product, ProductsSearch.Result>
{
public class Result
{
public string Query { get; set; }
}
public ProductsSearch()
{
Map = products => from product in products
select new
{
Query = new object[]
{
product.Title,
product.Tags.Select(tag => tag.Name),
product.Tags.SelectMany(tag => tag.Aliases, (tag, alias) => alias.Name)
}
};
Index(x => x.Query, FieldIndexing.Analyzed);
}
}
Run Code Online (Sandbox Code Playgroud)
一个区别是我必须使用SelectMany语句来获取标记的别名.标签可以有多个别名(即标签:鼠标别名:指点设备)
我不知道为什么SelectMany行会破坏索引.如果我删除它,索引工作.
这应该工作:
Map = products => from product in products
from tag in product.Tags
from alias in tag.Aliases
select new
{
Query = new object[]
{
product.Title,
tag.Name,
alias.Name
}
};
Run Code Online (Sandbox Code Playgroud)