我们在Web应用程序中使用Lucene .NET。我们从SQL数据库构建索引,然后搜索它。
我们有一种令人困惑的情况:两台服务器上的数据库相同,代码相同,配置相同(相信我,我们已经彻底检查了)。但是,运行相同的搜索会返回大量不同的文档(一个生成很多,另一个不生成)。
我们记录了针对Lucene运行的实际查询,我们在Lucene查询分析器中运行了这些查询,我们在两台服务器上获得了预期的结果。但是,通过我们的代码执行查询会在服务器之间产生完全不同的结果。
我们甚至在服务器之间复制了索引文件,我们得到了相同的结果 - 一台服务器总是提供很多结果,另一台则没有。
我们检查了两台服务器的配置 - 两台服务器都是Windows 2008 R2,64位版本,两者都设置为相同的区域设置等。
我们感到困惑 - 任何想法都非常感激
答案 0 :(得分:0)
Luke是一个使用基于java的分析器的java应用程序。我希望Luke和Lucene.Net之间的结果不同,特别是如果你使用不同于java版本的自定义分析器。
另外,请记住,new TermQuery("f", "my value")
会生成一个看起来像“f:my value”的查询,但将其抛入Luke将真正解析为“f:my default-field:value”,即a完全不同的搜索查询。
我首先要验证您使用的是正确的分析仪,并且它们正在生成正确的令牌。我会检查文化敏感的东西,因为他们通常会在你最不期望的时候偷偷摸摸。 (以及进程在非系统区域设置下执行的情况,以及线程在执行期间更改其区域设置的情况。)