在 Lucene 中将 n 个单词表达式索引为单个术语

标签 indexing lucene tokenize

我想在 Lucene 中将像“New York”这样的“复合词”索引为单个术语,而不是像“new”、“york”那样。这样,如果有人搜索“new place”,则包含“new york”的文档将不会匹配。

我认为 N-gram(实际上是 NGramTokenizer)的情况并非如此,因为我不会只索引任何 n-gram,我只想索引一些特定的 n-gram。

我做了一些研究,我知道我应该编写自己的分析器,也许我自己的分词器。但我对扩展 TokenStream/TokenFilter/Tokenizer 有点迷失。

谢谢

最佳答案

我认为您有某种方法可以检测要保留的多字单元 (MWU)。然后你可以做的就是用下划线替换其中的空格并使用 WhiteSpaceAnalyzer而不是 StandardAnalyzer (它会丢弃标点符号),也许使用 LowerCaseFilter .

编写自己的Tokenizer需要相当多的Lucene黑魔法。我一直无法理解 Lucene 2.9+ API,但请查看 TokenStream如果您真的想尝试,请参阅文档。

关于在 Lucene 中将 n 个单词表达式索引为单个术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3791040/

相关文章:

elasticsearch - 用于Elasticsearch的自定义 token 过滤器

java - 如何在加载数据时检查 Hibernate 是否正在使用数据库索引

indexing - 倒排索引和普通旧索引有什么区别?

c# - 如何为 .Net 构建 PDFBox

solr - Lucene:无需重新索引即可迁移 Java 版本

elasticsearch - Elasticsearch 中的词根替换原始字符串

java - 用 Java 解析日志文件

c# - 如何解决 "Index was outisde the bound of the array"错误?

mysql - 使用纬度/经度索引 mysql 表以进行地理查找

lucene - 在 ElasticSearch 中,移除停用词对评分的影响仍然很小