【问题标题】:What is the best full text search open source project (.NET preferred)?什么是最好的全文搜索开源项目(.NET 首选)?
【发布时间】:2010-11-08 13:34:41
【问题描述】:

我使用 Lucene 库开发了一个索引和搜索应用程序。但是这个库在我的上下文中对自定义排名有一些限制,除了它的性能,我需要可扩展性和访问各种词频等。有没有强大的开源全文库可用?

【问题讨论】:

  • 我发现 Lucene.net 的性能令人难以置信,所以听到有人说他们的性能有问题真是令人惊讶! (顺便说一句,Lucene 也有一个非常好的自定义评分等 API)
  • 我对 lucene 的性能没有任何问题,但是自定义排名太难了。

标签: c# lucene full-text-search


【解决方案1】:

你可以使用库Bsa.Search.Core在.Net中搜索

该库包含 4 种索引类型:

  • MemoryDocumentIndex - 快速内存索引
  • DiskDocumentIndex 将索引存储在磁盘上
  • FileDocumentIndex - 索引文件
  • ShardDocumentIndex - 在磁盘上存储超过 3 个的大型索引 百万份文件

使用内存索引的示例

var field = "*";
var query = "one | two";

var documentIndex = new MemoryDocumentIndex();
var content = "one two one two second try to welcome";
var title = "one first second four";

while (!documentIndex.IsReady) 
{ 
    Thread.Sleep(500); 
}

var searchService = new SearchServiceEngine(documentIndex);

var doc = new IndexDocument("ExternalId");
doc.Add("content".GetField(content);
// filter
doc.Add("intValue".GetFilterField(10));
doc.Add("longValue".GetFilterField(20l));
doc.Add("dateValue".GetFilterField(DateTime.UtcNow));

searchService.Index(new IndexDocument[]
{
    doc
});

var query = "one | two";
var parsed = query.Parse("*");


var request = new SearchQueryRequest()
{
    Query = parsed,
    Field = field,
    ShowHighlight = true,
    OrderField = SortOrderFields.Relevance,
    Order = SortOrder.Desc,
    Size = 20,
    Fields = new List<string>()
    {
        "content","id"
    },
    Filter = new FilterClause()
    {
        Condition = FilterCondition.Equal,
        Value = "intValue".GetFilterField(10),
        Next = new FilterClause()
        {
            Condition = FilterCondition.Great,
            Value = "longValue".GetFilterField(21l)
        }
    }
};
var result = searchService.Search(request);

【讨论】:

    【解决方案2】:

    http://www.sphinxsearch.com

    http://www.sphinxconnector.net/

    狮身人面像的主要特点是:

    • 高索引和搜索性能;
    • 高级索引和查询工具(灵活且功能丰富的文本标记器、查询语言、几种不同的排名模式等);
    • 高级结果集后处理(使用表达式、WHERE、ORDER BY、GROUP BY 等对文本搜索结果进行选择);
    • 经过验证的可扩展性高达每秒数十亿个文档、TB 级数据和数千个查询;
    • 与 SQL 和 XML 数据源以及 SphinxAPI、SphinxQL 或 SphinxSE 搜索界面轻松集成;
    • 通过分布式搜索轻松扩展。

    稍微扩展一下,Sphinx:

    • 具有高索引速度(在内部基准测试中每个内核高达 10-15 MB/秒);
    • 具有很高的搜索速度(每个核心高达 150-250 次查询/秒,针对 1,000,000 个文档,1.2 GB 的内部基准数据);
    • 具有高可扩展性(最大的已知集群索引超过 3,000,000,000 个文档,最繁忙的一个峰值超过 50,000,000 个查询/天);
    • 通过组合短语接近度排名和统计 (BM25) 排名提供良好的相关性排名;
    • 提供分布式搜索功能;
    • 提供文档摘录 (sn-ps) 生成;
    • 通过 SphinxAPI 或 SphinxQL 接口在应用程序内部提供搜索,并通过可插拔 SphinxSE 存储引擎在 MySQL 内部提供搜索;
    • 支持布尔、词组、词接近和其他类型的查询;
    • 每个文档支持多个全文字段(默认最多 32 个);
    • 支持每个文档的多个附加属性(即组、时间戳等);
    • 支持停用词;
    • 支持形态词形词典;
    • 支持标记化异常;
    • 同时支持单字节编码和 UTF-8;
    • 支持词干提取(英语、​​俄语和捷克语的词干分析器是内置的;法语、西班牙语、葡萄牙语、意大利语、罗马尼亚语、德语、荷兰语、瑞典语、挪威语、丹麦语、芬兰语、匈牙利语的词干分析器可通过构建第三个获得党 libstemmer 库);
    • 原生支持 MySQL(支持所有类型的表,包括 MyISAM、InnoDB、NDB、Archive 等);
    • 原生支持 PostgreSQL;
    • 原生支持 ODBC 兼容的数据库(MS SQL、Oracle 等);
    • ...还有 50 多个其他未在此处列出的功能,请参阅 API 和配置手册!

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2017-11-16
      • 1970-01-01
      • 2011-07-03
      • 2013-06-05
      • 1970-01-01
      • 2011-09-13
      • 2016-08-02
      • 1970-01-01
      相关资源
      最近更新 更多