在我的案例中,SQL用于结构化数据,并考虑使用Lucene进行文本搜索。 是的MSSQL有FullText,但Lucene提供了我想要的东西。 出于问题的目的,任何外部搜索。
在SQL中有一个带PK的主表。 在SQL中,有许多查询使用主表和其他表的数量。
从外部搜索中我将获得要过滤的Main.PK列表。 该列表可能是1到100万。
外部搜索是搜索中最昂贵的部分。 SQL部分非常有效。将SQL PK传递给外部并不是一个好选择,因为我需要来自SQL查询的各种数据。从Lucene回来的唯一东西是PK(术语),有时是得分。
有最好的做法吗?
我看到的选项是
其中Main.PK in(来自外部搜索的PK值)
在#TEMP中填充外部搜索PK值并加入到该中 因为有些时候我需要得分,这似乎是最好的,因为我可以把它 在#temp
在一个理想的世界里会有这样的联接:
join exeternalvirtualtable as evt
on evt.PK = Main.PK
and syntax specific to the external search
我得到了很多,但总的来说有类似的东西吗?
是否有语法/ API使外部搜索看起来像MSSQL的表(或视图)?
MSSQL到Lucene有什么类似的东西吗?
这是一个开始OLE DB Providers和OPENROWSET
理想情况下,Lucene的.NET Framework Data Providers将一些SQL语法映射到Lucene
如果有特定于.NET的解决方案,该应用程序是.NET。
产品RavenDB非常快速地结合了结构和非结构化(Lucene)搜索,即使Lucene返回了很多行,因此必须有一种方法可以做到这一点,而不是将PK放在#temp中。
答案 0 :(得分:1)
是否有语法/ API使外部搜索看起来像MSSQL的表(或视图)?
你可以使用IndexSearcher类的Lucene,它会给你一个包含相关文件的TopDocs对象(在你的情况下是PK)。然后,您可以根据此结果填充SQL表。
你需要这样的东西:
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
}