我正在使用hibernate-search-3.2.1 input,并希望将我的输入解析为带状疱疹。根据我在文档中所看到的,ShingleAnalyzerWrapper似乎正是我所需要的。我已经使用WhitespaceAnalyzer、StandardAnalyzer和SnowballAnalyzer作为ShingleAnalyzerWrapper的默认分析器进行了测试。
Version luceneVersion = Version.LUCENE_29;
SnowballAnalyzer keywordAnalyzer= new SnowballAnalyzer(luceneVersion, "English", StopAnalyzer.ENGLISH_STOP_WORDS_SET);
ShingleAnalyzerWrapper shingleAnalyzer = new ShingleAnalyzerWrapper(keywordAnalyzer, 4);
shingleAnalyzer.setOutputUnigrams(false);
QueryParser keywordParser = new QueryParser(luceneVersion, "keyword", keywordAnalyzer);
Query keywordQuery = keywordParser.parse(QueryParser.escape(keyword.toLowerCase()));但是,查询返回时为空。我期望像"hello world,this is Lucene“这样的关键字会导致带状疱疹hello world this is,world this is lucene,this is lucene
让我知道我对ShingleAnalyzerWrapper的期望和用法是否正确。
谢谢你,莱恩
发布于 2011-06-30 21:37:53
可能是复制/粘贴错误,但是在您的代码片段中,实际上并没有使用shingleAnalyzer,因为您将变量keywordAnalyzer传递给查询解析器。您在索引时使用的是什么分析器?
如果您使用过滤掉停用词的分析器作为ShingleAnalyzerWrapper的委托分析器,则停用词(在您的示例中为“this”和"is“)将在shingle分析器有机会从它们创建带状疱疹之前被删除。
调试分析器的一个好方法是使用类似于"Lucene in Action“中描述的AnalyzerUtils。您可以在此处获得示例代码:http://java.codefetch.com/example/in/LuceneInAction/src/lia/analysis/AnalyzerUtils.java
尼基塔
发布于 2011-07-07 02:25:20
谢谢尼基塔!是的,这是一个复制-粘贴错误,尽管正确的版本仍然会产生正确的结果。
你在AnalyzerUtils上的链接帮了我很大的忙,因为我能够使用下面的代码来生成瓦片:
ShingleAnalyzerWrapper shingleAnalyzer = new ShingleAnalyzerWrapper(4);
shingleAnalyzer.setOutputUnigrams(false);
TokenStream stream = shingleAnalyzer.tokenStream("contents", new StringReader("red dress shoes with black laces"));
ArrayList tokenList = new ArrayList();
while (true) {
Token token = null;
try {
token = stream.next();
} catch (IOException e) {
e.printStackTrace();
}
if (token == null) break;
tokenList.add(token);
}这会产生:
[(red dress,0,9,type=shingle), (red dress shoes,0,15,type=shingle,posIncr=0), (red dress shoes black,0,26,type=shingle,posIncr=0), (dress shoes,4,15,type=shingle), (dress shoes black,4,26,type=shingle,posIncr=0), (dress shoes black laces,4,32,type=shingle,posIncr=0), (shoes black,10,26,type=shingle), (shoes black laces,10,32,type=shingle,posIncr=0), (black laces,21,32,type=shingle)]问题不在于ShingleAnalyzerWrapper本身,而在于QueryParser。我需要更多的挖掘来找出潜在的原因,但你给了我一些开始的地方。
https://stackoverflow.com/questions/5254599
复制相似问题