与ravendb的方面

时间:2012-11-06 17:08:06

标签: ravendb

我正在尝试使用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");

我尝试了很多变化而没有成功。

有没有人有想法我做错了什么?

由于

2 个答案:

答案 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)。