2011-03-10 28 views
1

我正在使用hibernate-search-3.2.1.Final并希望将我的输入解析为带状疱疹。从我在文档中可以看到的,ShingleAnalyzerWrapper看起来正是我所需要的。我已经使用WhitespaceAnalyzer,StandardAnalyzer和SnowballAnalyzer作为ShingleAnalyzerWrapper的默认分析器进行了测试。Hibernate搜索ShingleAnalyzer打包工作示例

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())); 

但是,查询返回为空。我期待关键词像“你好的世界,这是Lucene”导致带状疱疹[你好世界这是,世界这是lucene,这是lucene]

让我知道我的期望和使用ShingleAnalyzerWrapper是否正确。

感谢, 瑞安

回答

2

也许这是一个复制/粘贴错误,但在你的代码片段,实际上没有被因为你传递变量keywordAnalyzer到查询分析器中使用的shingleAnalyzer。你在索引时间使用什么分析仪?

如果您使用分析器过滤出停用词作为ShingleAnalyzerWrapper的代表分析器,那么在木瓦分析器有机会从它们创建木瓦之前,会停止使用单词(在本例中为“this”和“is”) 。

调试分析器的一个好方法是使用类似“Lucene in Action”中所述的AnalyzerUtils。你可以在这里的示例代码:http://java.codefetch.com/example/in/LuceneInAction/src/lia/analysis/AnalyzerUtils.java

尼基塔

1

感谢尼基塔!是的,这是一个复制粘贴错误,虽然正确的版本仍然产生正确的结果。

您对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。我需要进一步挖掘,找出潜在的原因,但是你让我从哪里开始。