gpt4 book ai didi

lucene - 如何搜索特殊字符(+ !\? : ) in Lucene

转载 作者:行者123 更新时间:2023-12-04 02:06:09 34 4
gpt4 key购买 nike

我想在索引中搜索特殊字符。

我转义了查询字符串中的所有特殊字符,但是当我在索引中的 lucene 上执行查询为 + 时,它会创建查询为 +()。

因此它不搜索任何字段。

如何解决这个问题呢?我的索引包含这些特殊字符。

最佳答案

如果您使用的是 StandardAnalyzer ,这将丢弃非字母数字字符。尝试使用 WhitespaceAnalyzer 索引相同的值看看这是否保留了您需要的字符。它还可能会保留您不想要的东西:那时您可能会考虑编写自己的分析器,这基本上意味着创建一个 TokenStream 堆栈来完成您需要的处理类型。

例如,SimpleAnalyzer实现以下管道:

@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
return new LowerCaseTokenizer(reader);
}

这只是小写 token 。
StandardAnalyzer做得更多:
/** Constructs a {@link StandardTokenizer} filtered by a {@link
StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */
@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
StandardTokenizer tokenStream = new StandardTokenizer(matchVersion, reader);
tokenStream.setMaxTokenLength(maxTokenLength);
TokenStream result = new StandardFilter(tokenStream);
result = new LowerCaseFilter(result);
result = new StopFilter(enableStopPositionIncrements, result, stopSet);
return result;
}

您可以在 org.apache.lucene.analysis 中混合和匹配这些组件和其他组件。 ,或者您可以编写自己的专业 TokenStream由您的自定义包装到处理管道中的实例 Analyzer .

另一件要看的事情是什么样的 CharTokenizer你正在使用。 CharTokenizer是一个抽象类,指定用于标记文本字符串的机制。它被一些更简单的分析器使用(但不被 StandardAnalyzer 使用)。 Lucene 有两个子类: LetterTokenizer和一个 WhitespaceTokenizer .你可以创建你自己的,通过实现 boolean isTokenChar(char c) 来保留你需要的字符并打破那些你不需要的字符。方法。

关于lucene - 如何搜索特殊字符(+ !\? : ) in Lucene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107875/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com