结合 SQL 与外部搜索

Combine SQL with an external search

在我的例子中 SQL 用于结构化数据并考虑使用 Lucene 进行文本搜索。 是的,MSSQL 有全文,但 Lucene 提供了一些我想要的东西。 出于问题的目的任何外部搜索。

SQL里面有个主table有PK。 在 SQL 中有一些使用主要 table 和其他 table 的查询。

从外部搜索中,我将获得 Main.PK 列表作为过滤依据。 该列表可能从 1 到 100 万。

外部搜索是搜索中成本最高的部分。 SQL 部分非常有效。将 SQL PK 传递给外部并不是一个好的选择,因为我需要来自 SQL 查询的各种数据。从 Lucene 返回的唯一东西是 PK(术语)和一些分数。

有最佳实践吗?

我看到的选项是

在理想的世界中,会有这样的连接:

join exeternalvirtualtable as evt 
  on evt.PK = Main.PK 
 and syntax specific to the external search 

我知道这个问题问得很多,但通常有类似的问题吗?
是否有 syntax/API 使外部搜索看起来像 MSSQL 的 table(或视图)?
MSSQL 到 Lucene 有类似的东西吗?
这是一个开始 OLE DB Providers and OPENROWSET
理想情况下,Lucene 的 .NET Framework Data Providers 将一些 SQL 语法映射到 Lucene。
如果有特定于 .NET 的解决方案,则该应用程序是 .NET。

产品 RavenDB 结合结构和非结构化 (Lucene) 搜索速度非常快,即使 Lucene return 有很多行,所以必须有一种方法可以做到这一点,而不是将 PK 放在 #temp 中.

Is there a syntax/API to make an external search look like a table (or view) to MSSQL?

您可以使用 Lucene 的 IndexSearcher class,它会给您一个包含相关文档(在您的情况下为 PK)的 TopDocs 对象。然后你可以根据这个结果填充一个SQL table。

您将需要这样的东西:

    TopDocs topDocs = searcher.search(query, MAX_HITS);
    for (int i = 0; i < topDocs.scoreDocs.length; i++) {
        Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
        String pk = doc.get("PK");
        // Connection to database and executing insertion 
    }