gpt4 book ai didi

lucene - 使用 RavenDb/Lucene 的分面搜索中的分层分类法?

转载 作者:行者123 更新时间:2023-12-04 14:49:06 26 4
gpt4 key购买 nike

我正在考虑使用 RavenDb 来实现“高级分面搜索”场景。
在支持全文搜索和所有其他基本功能的同时,我必须处理复杂的分层分类法和跨树不同分支的共享方面。

是否有任何资源记录如何使用 RavenDb API 执行此操作?

关于这个主题的极其复杂的论文:Beyond Basic Faceted Search
Solr的方式:HierarchicalFaceting

最佳答案

最后..

using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using Raven.Abstractions.Data;
using Raven.Client;
using Raven.Client.Document;
using Raven.Client.Indexes;
using Raven.Client.Linq;

namespace Prototype.Search.Tests
{
[TestFixture]
public class HierarchicalFaceting
{
//
// Document definition
//
public class Doc
{
public Doc()
{
Categories = new List<string>();
}

public int Id { get; set; }
public List<string> Categories { get; set; }
}

//
// Data sample
//
public IEnumerable<Doc> GetDocs()
{
yield return new Doc { Id = 1, Categories = new List<string> { "0/NonFic", "1/NonFic/Law"} };
yield return new Doc { Id = 2, Categories = new List<string> { "0/NonFic", "1/NonFic/Sci" } };
yield return new Doc { Id = 3, Categories = new List<string> { "0/NonFic", "1/NonFic/Hist", "1/NonFic/Sci", "2/NonFic/Sci/Phys" } };
}

//
// The index
//
public class DocByCategory : AbstractIndexCreationTask<Doc, DocByCategory.ReduceResult>
{
public class ReduceResult
{
public string Category { get; set; }
}

public DocByCategory()
{
Map = docs =>
from d in docs
from c in d.Categories
select new
{
Category = c
};
}
}

//
// FacetSetup
//
public FacetSetup GetDocFacetSetup()
{
return new FacetSetup
{
Id = "facets/Doc",
Facets = new List<Facet>
{
new Facet
{
Name = "Category"
}
}
};
}

[SetUp]
public void SetupDb()
{
IDocumentStore store = new DocumentStore()
{
Url = "http://localhost:8080"
};
store.Initialize();
IndexCreation.CreateIndexes(typeof(HierarchicalFaceting).Assembly, store);

var session = store.OpenSession();
session.Store(GetDocFacetSetup());
session.SaveChanges();

store.Dispose();
}

[Test]
[Ignore]
public void DeleteAll()
{
IDocumentStore store = new DocumentStore()
{
Url = "http://localhost:8080"
};
store.Initialize();

store.DatabaseCommands.DeleteIndex("Raven/DocByCategory");
store.DatabaseCommands.DeleteByIndex("Raven/DocumentsByEntityName", new IndexQuery());

store.Dispose();
}

[Test]
[Ignore]
public void StoreDocs()
{
IDocumentStore store = new DocumentStore()
{
Url = "http://localhost:8080"
};
store.Initialize();

var session = store.OpenSession();

foreach (var doc in GetDocs())
{
session.Store(doc);
}

session.SaveChanges();
session.Dispose();
store.Dispose();
}

[Test]
public void QueryDocsByCategory()
{
IDocumentStore store = new DocumentStore()
{
Url = "http://localhost:8080"
};
store.Initialize();

var session = store.OpenSession();

var q = session.Query<DocByCategory.ReduceResult, DocByCategory>()
.Where(d => d.Category == "1/NonFic/Sci")
.As<Doc>();

var results = q.ToList();
var facetResults = q.ToFacets("facets/Doc").ToList();

session.Dispose();
store.Dispose();
}

[Test]
public void GetFacets()
{
IDocumentStore store = new DocumentStore()
{
Url = "http://localhost:8080"
};
store.Initialize();

var session = store.OpenSession();

var q = session.Query<DocByCategory.ReduceResult, DocByCategory>()
.Where(d => d.Category.StartsWith("1/NonFic"))
.As<Doc>();

var results = q.ToList();
var facetResults = q.ToFacets("facets/Doc").ToList();

session.Dispose();
store.Dispose();
}
}
}

关于lucene - 使用 RavenDb/Lucene 的分面搜索中的分层分类法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com