java - 在 Lucene 搜索引擎中使用自建方法
问题描述
我正在寻找一个合适的搜索引擎,我可以在其中使用我自己的相似性度量和标记化方法。为此目的引入了 Lucene 搜索引擎作为一个很好的搜索引擎,但我对此一无所知。我在网上搜索了新版 Lucene 搜索引擎的教程,但大部分页面都是几年前的。我的一些问题如下:
是否可以更改相似性度量、标记化和词干方法并在 Lucene 中使用自建类?如果是,该怎么做?
我们为关键字搜索或短语搜索对文本进行索引的方式有什么区别吗?我应该为关键字搜索和短语搜索创建两个不同的索引吗?(我认为如果我们删除停用词,它会影响短语搜索的结果,如果我不删除停用词,它会影响关键字搜索的结果,不是吗?)
感谢您提供有关此主题的任何信息。
解决方案
这是可能的,是的,我们在我的工作场所使用了几个解决方案。这是有关如何执行此操作的合理教程。本教程使用 Solr,这是一个很好的 Lucene 实现。直接回答您的问题:
是的,有一种方法可以通过覆盖接口并提供您自己的实现来做到这一点(参见教程)。可以在不需要覆盖 Solr 默认配置中的类的情况下完成标记化,具体取决于您需要使用 Tokenization 获得的时髦程度。
是的,创建将返回准确结果的索引是了解用户将如何搜索索引的一种衡量标准。话虽如此,查询搜索的大部分复杂性来自于人们希望匹配结果浮动到结果列表的顶部,这是通过评分完成的。鉴于听起来您正在寻求覆盖得分,这对您来说可能并不重要。您应该注意,默认情况下,Lucene 将匹配多列的命中,而不是精确匹配单列的单个匹配。这意味着,如果您跨多列存储数据(并且默认跨多列搜索),您的搜索将越来越不“准确”。
针对单个列的全文搜索往往是非常准确的短语与单词,但您最终会得到一个相当大的索引。
推荐阅读
- c++ - 作为参数的函数是否必须按值传递?
- abp - 我怎样才能知道我的模态表单中有什么脏东西?
- java - 消息分组可以做消息分段的作用吗?
- gams-math - GAMS 编译到 GDX 删除所有零值的列
- javascript - 为什么 vscode 自动完成在 js 函数中不起作用?
- javascript - 我是 React 新手,有人能告诉我为什么会这样吗?
- sql - 检查 2 个表的差异,使用编程语言或纯 SQL
- flutter - 为元素存储两种不同颜色并在主题更改时同时更改的最佳方法?
- powershell - 使用 Powershell 重命名远程 FTP 上的文件
- c# - 存储库模式中的类映射错误