我正在尝试使用ravendb中的facet能力,但会得到奇怪的结果。
我有一些文件:
{
"SearchableModel": "42LC2RR ",
"ModelName": "42LC2RR",
"ModelID": 490578,
"Name": "LG 42 Television 42LC2RR",
"Desctription": "fffff",
"Image": "1/4/9/8/18278941c",
"MinPrice": 9400.0,
"MaxPrice": 9400.0,
"StoreAmounts": 1,
"AuctionAmounts": 0,
"Popolarity": 3,
"ViewScore": 0.0,
"ReviewAmount": 2,
"ReviewScore": 45,
"Sog": "E-TV",
"SogID": 1,
"IsModel": true,
"Manufacrurer": "LG",
"ParamsList": [
"1994267",
"46570",
"4134",
"4132",
"4118",
"46566",
"4110",
"180676",
"239517",
"750771",
"2658507",
"2658498",
"46627",
"4136",
"169941",
"169846",
"145620",
"169940",
"141416",
"3190767",
"3190768",
"144720",
"2300706",
"4093",
"4009",
"1418470",
"179766",
"190025",
"170557",
"170189",
"43768",
"4138",
"67976",
"239516",
"3190771",
"141195"
],
}
其中ParamList表示产品的属性,在我们的应用程序中,我们在缓存中有每个param代表的内容。
在搜索特定产品时,我想计算所有返回的属性,以便能够在搜索后添加每个项目的数量。
在电视类别中搜索lg后,我想得到:
Param:4134女巫是LCD的代表,数量为65.
但不幸的是我得到了奇怪的结果。只有一些参数被计算而有些没有。 在一些搜索者中,我得到了结果,我没有得到任何金额。
我正在使用最新的稳定版RavenDB。
索引:
from doc in docs
from param in doc.ParamsList
select new {Name=doc.Name,Description=doc.Description,SearchNotVisible = doc.SearchNotVisible,SogID=doc.SogID,Param =param}
facet:
DocumentStore documentStore = new DocumentStore { ConnectionStringName = "Server" };
documentStore.Initialize();
using (IDocumentSession session = documentStore.OpenSession())
{
List<Facet> _facets = new List<Facet>
{
new Facet {Name = "Param"}
};
session.Store(new FacetSetup { Id = "facets/Params", Facets = _facets });
session.SaveChanges();
}
用法示例:
IDictionary<string, IEnumerable<FacetValue>> facets = session.Advanced.DatabaseCommands.GetFacets("FullIndexParams", new IndexQuery { Query = "Name:lg" }, "facets/Params");
我尝试了很多变化而没有成功。
有没有人有想法我做错了什么?
由于
答案 0 :(得分:0)
使用此索引,它应该可以解决您的问题:
from doc in docs
select new {Name=doc.Name,Description=doc.Description,SearchNotVisible = doc.SearchNotVisible,SogID=doc.SogID,Param = doc.ParamsList}
答案 1 :(得分:0)
您为“名称”字段设置了什么分析器。我看到你用名字“lg”搜索。默认情况下,Ravendb使用KeywordAnalyzer,意味着您必须按确切名称搜索。您应该为Name或Description字段设置另一个分析器(例如StandardAnalyzer)。