Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 在RavenDB中创建更多类似的内容_Indexing_Mapreduce_Ravendb_Morelikethis - Fatal编程技术网

Indexing 在RavenDB中创建更多类似的内容

Indexing 在RavenDB中创建更多类似的内容,indexing,mapreduce,ravendb,morelikethis,Indexing,Mapreduce,Ravendb,Morelikethis,我的域中有以下文档: public class Article { public string Id { get; set; } // some other properties public IList<string> KeywordIds { get; set; } } public class Keyword { public string Id { get; set; } public string UrlName { get; se

我的域中有以下文档:

public class Article {
    public string Id { get; set; }
    // some other properties
    public IList<string> KeywordIds { get; set; }
}

public class Keyword {
    public string Id { get; set; }
    public string UrlName { get; set; }
    public string Title { get; set; }
    public string Tooltip { get; set; }
    public string Description { get; set; }
}
公共类文章{
公共字符串Id{get;set;}
//其他一些属性
公共IList关键字ID{get;set;}
}
公共类关键字{
公共字符串Id{get;set;}
公共字符串UrlName{get;set;}
公共字符串标题{get;set;}
公共字符串工具提示{get;set;}
公共字符串说明{get;set;}
}
我有这样一个场景:

  • 文章
    A1
    有关键字
    K1
  • 文章
    A2
    有关键字
    K1
  • 一个用户阅读文章
    A1
  • 我想建议用户阅读文章
    A2

我知道我可以使用更像这个包的
,并且我阅读了文档,但我不知道如何做到这一点?你能帮我一下吗?

看看这个例子,你可以用“类型”代替“关键字”:

使用系统;
使用System.Collections.Generic;
使用系统诊断;
使用System.Linq;
使用System.Linq.Expressions;
使用Lucene.Net.Analysis;
使用Raven.Abstractions.Data;
使用Raven.Abstractions.index;
使用Raven.Client;
使用Raven.Client.Bundles.MoreLikeThis;
使用Raven.Client.index;
使用Raven.Tests.Helpers;
使用Xunit;
名称空间RavenDBEval
{
公共类更像评估:RavenTestBase
{
私有只读IDocumentStore\u存储;
公共价值评估
{
_store=(IDocumentStore)NewDocumentStore();
_store.Initialize();
}
[事实]
public void应将两部电影与Amecast()匹配
{
字符串id;
使用(var session=\u store.OpenSession())
{
new MoviesByCastIndex().Execute(_store);
new MoviesByGenreIndex().Execute(_store);
GetGenreList().ForEach(session.Store);
var list=GetMovieList();
list.ForEach(session.Store);
session.SaveChanges();
id=session.Advanced.GetDocumentId(list.First());
WaitForIndexing(_存储);
}
使用(var session=\u store.OpenSession())
{
var moreLikeThisByCast=会话
.高级
.MoreLikeThis(新的MoreLikeThis查询
{
DocumentId=id,
Fields=new[]{“Cast”},
最小终端频率=1,
最小文档频率=2
});
var moreLikeThisByGenre=会话
.高级
.MoreLikeThis(新的MoreLikeThis查询
{
DocumentId=id,
字段=新[]{“类型”},
最小终端频率=1,
最小文档频率=2
});
foreach(Morelikethis Bycast中的var电影)
{
Debug.Print(“{0},Cast={1}”,movie.Title,string.Join(“,”,movie.Cast));
}
Assert.NotEmpty(更像是Bycast);
foreach(更像这一流派的电影)
{
Debug.Print(“{0}”,movie.Title);
foreach(电影中的var genreId.tyres)
{
var genre=session.Load(genreId);
Print(“\t\t{0}”,genre.Name);
}
}
Assert.NotEmpty(更像是按体裁);
}
}
私有静态列表GetGenreList()
{
返回新列表
{
新类型{Id=“genres/1”,Name=“喜剧”},
新类型{Id=“genres/2”,Name=“戏剧”},
新类型{Id=“genres/3”,Name=“Action”},
新类型{Id=“genres/4”,Name=“Sci Fi”},
};
} 
私有静态列表GetMovieList()
{
返回新列表
{
新电影
{
Title=“星球大战第四集:新希望”,
流派=新[]{“流派/3”、“流派/4”},
铸造=新[]
{
“马克·哈米尔”,
“哈里森·福特”,
“嘉莉·费舍尔”
}
},
新电影
{
Title=“星球大战第五集:帝国反击”,
流派=新[]{“流派/3”、“流派/4”},
铸造=新[]
{
“马克·哈米尔”,
“哈里森·福特”,
“嘉莉·费舍尔”
}
},
新电影
{
Title=“一些假电影”,
流派=新[]{“流派/2”},
铸造=新[]
{
“詹姆斯·佛朗哥”,
“刺痛”,
“嘉莉·费舍尔”
}
},
新电影
{
Title=“对话”,
流派=新[]
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Linq.Expressions;
using Lucene.Net.Analysis;
using Raven.Abstractions.Data;
using Raven.Abstractions.Indexing;
using Raven.Client;
using Raven.Client.Bundles.MoreLikeThis;
using Raven.Client.Indexes;
using Raven.Tests.Helpers;
using Xunit;

namespace RavenDBEval
{
    public class MoreLikeThisEvaluation : RavenTestBase
    {
        private readonly IDocumentStore _store;

        public MoreLikeThisEvaluation()
        {
            _store = (IDocumentStore)NewDocumentStore();
            _store.Initialize();
        }

    [Fact]
    public void ShouldMatchTwoMoviesWithSameCast()
    {
        string id;
        using (var session = _store.OpenSession())
        {
            new MoviesByCastIndex().Execute(_store);
            new MoviesByGenreIndex().Execute(_store);
            GetGenreList().ForEach(session.Store);
            var list = GetMovieList();
            list.ForEach(session.Store);
            session.SaveChanges();
            id = session.Advanced.GetDocumentId(list.First());
            WaitForIndexing(_store);
        }

        using (var session = _store.OpenSession())
        {
            var moreLikeThisByCast = session
                .Advanced
                .MoreLikeThis<Movie, MoviesByCastIndex>(new MoreLikeThisQuery
                                                     {
                                                         DocumentId = id, 
                                                         Fields = new[] { "Cast" },
                                                         MinimumTermFrequency = 1,
                                                         MinimumDocumentFrequency = 2
                                                     });
            var moreLikeThisByGenre = session
                .Advanced
                .MoreLikeThis<Movie, MoviesByGenreIndex>(new MoreLikeThisQuery
                {
                    DocumentId = id,
                    Fields = new[] { "Genres" },
                    MinimumTermFrequency = 1,
                    MinimumDocumentFrequency = 2
                });

            foreach (var movie in moreLikeThisByCast)
            {
                Debug.Print("{0}, Cast={1}", movie.Title, string.Join(",", movie.Cast));
            }

            Assert.NotEmpty(moreLikeThisByCast);

            foreach (var movie in moreLikeThisByGenre)
            {
                Debug.Print("{0}", movie.Title);
                foreach (var genreId in movie.Genres)
                {
                    var genre = session.Load<Genre>(genreId);
                    Debug.Print("\t\t{0}", genre.Name);
                }
            }
            Assert.NotEmpty(moreLikeThisByGenre);

        }
    }

    private static List<Genre> GetGenreList()
    {
        return new List<Genre>
                   {
                       new Genre {Id = "genres/1", Name = "Comedy"},
                       new Genre {Id = "genres/2", Name = "Drama"},
                       new Genre {Id = "genres/3", Name = "Action"},
                       new Genre {Id = "genres/4", Name = "Sci Fi"},
                   };
    } 

    private static List<Movie> GetMovieList()
    {
        return new List<Movie>
                   {
                       new Movie
                           {
                               Title = "Star Wars Episode IV: A New Hope",
                               Genres = new[] {"genres/3", "genres/4"},
                               Cast = new[]
                                          {
                                              "Mark Hamill",
                                              "Harrison Ford",
                                              "Carrie Fisher"
                                          }
                           },
                       new Movie
                           {
                               Title = "Star Wars Episode V: The Empire Strikes Back",
                               Genres = new[] {"genres/3", "genres/4"},
                               Cast = new[]
                                          {
                                              "Mark Hamill",
                                              "Harrison Ford",
                                              "Carrie Fisher"
                                          }
                           },
                       new Movie
                           {
                               Title = "Some Fake Movie",
                               Genres = new[] {"genres/2"},
                               Cast = new[]
                                          {
                                              "James Franco",
                                              "Sting",
                                              "Carrie Fisher"
                                          }
                           },
                       new Movie
                           {
                               Title = "The Conversation",
                               Genres = new[] {"genres/2"},
                               Cast =
                                   new[]
                                       {
                                           "Gene Hackman",
                                           "John Cazale",
                                           "Allen Garfield",
                                           "Harrison Ford"
                                       }
                           },
                       new Movie
                           {
                               Title = "Animal House",
                               Genres = new[] {"genres/1"},
                               Cast = new[]
                                          {
                                              "John Belushi",
                                              "Karen Allen",
                                              "Tom Hulce"
                                          }
                           },
                       new Movie
                           {
                               Title="Superman",
                               Genres = new[] {"genres/3", "genres/4"},
                               Cast= new[]
                                         {
                                             "Christopher Reeve", 
                                             "Margot Kidder", 
                                             "Gene Hackman",
                                             "Glen Ford"
                                         }
                           }
                   };
    }
}

public class Movie
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string[] Cast { get; set; }
    public string[] Genres { get; set; }
}

public class Genre
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class MoviesByGenreIndex : AbstractIndexCreationTask<Movie>
{
    public MoviesByGenreIndex()
    {
        Map = docs => from doc in docs
                      select new { doc.Genres };

        Analyzers = new Dictionary<Expression<Func<Movie, object>>, string>
                        {
                            {
                                x => x.Genres,
                                typeof (KeywordAnalyzer).FullName
                                }
                        };

        Stores = new Dictionary<Expression<Func<Movie, object>>, FieldStorage>
                     {
                         {
                             x => x.Genres, FieldStorage.Yes
                         }
                     };
    }
}

public class MoviesByCastIndex : AbstractIndexCreationTask<Movie>
{
    public MoviesByCastIndex()
    {
        Map = docs => from doc in docs
                      select new { doc.Cast };

        Analyzers = new Dictionary<Expression<Func<Movie, object>>, string>
                        {
                            {
                                x => x.Cast,
                                typeof (KeywordAnalyzer).FullName
                                }
                        };

        Stores = new Dictionary<Expression<Func<Movie, object>>, FieldStorage>
                     {
                         {
                             x => x.Cast, FieldStorage.Yes
                         }
                     };
    }
}
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Lucene.Net" version="3.0.3" targetFramework="net40" />
  <package id="Lucene.Net.Contrib" version="3.0.3" targetFramework="net40" />
  <package id="RavenDB.Client" version="2.0.2261" targetFramework="net40" />
  <package id="RavenDB.Database" version="2.0.2261" targetFramework="net40" />
  <package id="RavenDB.Embedded" version="2.0.2261" targetFramework="net40" />
  <package id="RavenDB.Tests.Helpers" version="2.0.2261" targetFramework="net40" />
  <package id="SharpZipLib" version="0.86.0" targetFramework="net40" />
  <package id="xunit" version="1.9.1" targetFramework="net40" />
</packages>