如何使用Lucene.Net执行“contains”搜索而不是“beginswith'”我们使用Lucene。NET对客户网站进行全文搜索。搜索本身已经可以工作,但我们现在要进行修改。目前所有的术语都有一个*附加到它们,这导致Lucene执行我将归类为StartsWith搜索的操作。将来,我们希望像Contains而不是StartsWith那样执行搜索。我们使用Sample:(Title:Orch*)matches:Orchestrabut:(Title:rch*)doesnotmatch:Orchestra我们希望first和second都匹配Orchestra。基本上我想要与这个问题中提到的完全相反,我不确定为什么这个人Lucene默认包含Contains而不是StartsWith:WhyisthisLucenequery"contains"insteadof"startsWith"?我们怎样才能实现这个目标?我觉得这与分析仪有关,但我不确定。首先,我假设您正在使用StandardAnalyzer或类似的东西。您链接的问题不理解您的搜索词,他的casea*将匹配“FleetAfrica”,因为它被标记为“fleet”和“africa”。您需要调用QueryParser.SetAllowLeadingWildcard(true)来编写类似field:*value*的查询。您实际上是在更改传递给QueryParser的字符串吗?您可以像往常一样解析查询,然后实现QueryVisitor,将所有TermQuery重写为WildcardQuery。这样你仍然支持短语搜索。我认为将查询重写为前缀或通配符查询没有任何好处。orc、chest和orchestra之间几乎没有共享,但这两个词会匹配。相反,将您的客户与支持词干提取、同义词并提供拼写校正以修复简单搜索错误的分析器联系起来。@SimonSvensson可能给出了更好的答案(即你不需要这个),但如果你这样做,你应该使用Shinglefilter。请注意,这将使您的索引显着变大,因为您不会只存储“orchestra”,而是“orc”、“rch”、“che”、“hes”……而只是带有前导通配符查询的简单术语要很慢。它基本上必须查看语料库中的每个单词。以上是C#学习教程:HowtouseLucene.Nettoperforma"contains"searchinsteadof"beginningwith'"。整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
