我正在使用与Kentico CMS一起打包的Lucene.Net实现。我们正在编制索引的网站上有各种语言的文章。如果用户正在查看该站点的日语版本(例如)并运行搜索“VPN”,我们希望他们先查看有关VPN的日文文章,还可以在结果中查看其他语言文章。
我正在努力通过查询时间提升_culture字段来实现这一目标。由于我们使用标准分析器(实际上不想改变它),并且标准分析器将连字符视为空格,我想我会尝试将'(_culture:jp)^ 4'附加到用户的查询中。正如您从Luke工具的Explain输出中看到的那样,在该字段中使用'jp'来提升文档没有做任何事情。是什么给了什么?
我也试过了:
_culture: “EN-JP”
_culture:en AND _culture:jp
_culture:“en jp”
更新:这是该领域的事情。索引中另一个名为“documentculture”的字段包含相同的数据(不知道为什么)。但是,当我尝试'(documentculture:jp)^ 4'时,它可以正常运行。这解决了我的问题,但我仍然有一个关于领域如何不同的学术问题。
答案 0 :(得分:2)
即使标准分析器忽略了连字符,我也不相信它会将您的文化代码的两个部分视为单独的术语。因此,在正常情况下,通配符可以帮助您。例如,查询vpn (_culture:en*)^4
将使用以 en 开头的文化来提升所有文档。
但是,在您的情况下,您希望匹配术语的结尾。不幸的是,由于某种原因,Lucene语法在术语开头不支持通配符(根据this reference)。因此,我认为您将不得不考虑更改您正在使用的分析仪。我通常发现Whitespace分析仪最符合我的需求。我刚刚使用空白分析器尝试过您的场景,并且发现vpn (_culture:en-jp)^4
会为您提供所需的内容。
我知道如果你不接受这个答案,因为你声明你不想改变分析仪!