0

我正在尝试使用 ravendb 中的方面能力,但得到了奇怪的结果。

我有这样的文件:

 {
  "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 代表产品的一个属性,在我们的应用程序中,我们在缓存中缓存了每个参数代表的内容。

在搜索特定产品时,我想计算所有返回属性,以便能够在搜索后添加每个项目的数量。

在电视类别中搜索 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}

方面:

 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");

我尝试了许多变化但没有成功。

有谁知道我做错了什么?

谢谢

4

2 回答 2

0

使用此索引,它应该可以解决您的问题:

from doc in docs
select new {Name=doc.Name,Description=doc.Description,SearchNotVisible = doc.SearchNotVisible,SogID=doc.SogID,Param = doc.ParamsList}
于 2012-11-06T21:37:46.477 回答
0

您为“名称”字段设置的分析器。我看到您按名称“lg”搜索。默认情况下,Ravendb 使用 KeywordAnalyzer,这意味着您必须按确切名称进行搜索。您应该为名称或描述字段设置另一个分析器(例如 StandardAnalyzer)。

于 2018-04-26T03:43:12.977 回答