0

私はravendbが初めてで、私が働いている会社で仕事ができるかどうかを試してみています。

10K レコードのデータをサーバーに更新しました。各データは次のようになります。

{
  "ModelID": 371300,
  "Name": "6310I",
  "Image": "0/7/4/9/28599470c",
  "MinPrice": 200.0,
  "MaxPrice": 400.0,
  "StoreAmounts": 4,
  "AuctionAmounts": 0,
  "Popolarity": 16,
  "ViewScore": 0.0,
  "ReviewAmount": 4,
  "ReviewScore": 40,
  "Cat": "E-Cellphone",
  "CatID": 1100,
  "IsModel": true,
  "ParamsList": [
    {
      "ModelID": 371300,
      "Pid": 188396,
      "IntVal": 188402,
      "Param": "Nokia",
      "Name": "Manufacturer",
      "Unit": "",
      "UnitDir": "left",
      "PrOrder": 0,
      "IsModelPage": true
    },
    {
       "ModelID": 371305,
       "Pid": 398331,
       "IntVal": 1559552,
       "Param": "1.6",
       "Name": "Screen size",
       "Unit": "inch",
       "UnitDir": "left",
       "PrOrder": 1,
       "IsModelPage": false
},.....

ここで、ParamsList は、1 つの製品のすべての属性の配列です。

のインデックスを作成した後:

from doc in docs.FastModels
from docParamsListItem in ((IEnumerable<dynamic>)doc.ParamsList).DefaultIfEmpty()
select new { Param = docParamsListItem.IntVal, Cat = doc.Cat }

との側面

 var facetSetupDoc = new FacetSetup
       {
           Id = "facets/Params2Facets",
           Facets = new List<Facet> { new Facet { Name = "Param" } }
       };

そして、このように検索します

  var facetResults = session.Query<FastModel>("ParamNewIndex")
               .Where(x => x.Cat == "e-cellphone")
               .ToFacets("facets/Params2Facets");

クエリに 1 秒以上かかり、それは 10K のデータのみです。DBに100万以上の製品を保有している当社。

私は何か間違っていますか?

4

1 に答える 1

1

ファセットを生成するには、 の個々の値をすべてチェックする必要がありますdocParamsListItem.IntVal。数が多い場合は、時間がかかる場合があります。一般に、多くのファセットを持つべきではありません。それは意味がなく、ユーザーの役に立たないからです。整数の場合、通常は実際の値ではなく範囲を使用します。たとえば、特定の範囲内の価格。製造元や、ロット番号やアイテム (約 12 ~ 2 個) がある MegaPixels カウントなどのフィールドのみを使用します。

使用しているビルドについては言及されていませんでしたが、最近いくつかの大きな改善を行いました。

于 2012-07-26T20:33:32.877 に答える