Hibernate Search ShingLeanalyzerRapper工作示例

Hibernate Search ShingLeanalyzerRapper工作示例,hibernate,lucene,full-text-search,hibernate-search,Hibernate,Lucene,Full Text Search,Hibernate Search,我正在使用hibernate-search-3.2.1.Final,并希望将我的输入解析为shingles。从文档中可以看到,ShingleanalyzerRapper似乎正是我所需要的。我已经使用WhitespaceAnalyzer、StandardAnalyzer和SnowBallaAnalyzer作为ShingleanalyzerRapper的默认分析器进行了测试 Version luceneVersion = Version.LUCENE_29; SnowballAnalyzer key

我正在使用hibernate-search-3.2.1.Final,并希望将我的输入解析为shingles。从文档中可以看到,ShingleanalyzerRapper似乎正是我所需要的。我已经使用WhitespaceAnalyzer、StandardAnalyzer和SnowBallaAnalyzer作为ShingleanalyzerRapper的默认分析器进行了测试

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]

让我知道我对ShingleanalyzerRapper的期望和使用是否正确

谢谢,
Ryan

可能是复制/粘贴错误,但在您的代码段中,shingleAnalyzer实际上没有被使用,因为您正在将变量keywordAnalyzer传递给查询解析器。索引时您使用的是什么分析器

如果使用筛选出停止字的分析器作为ShingleAnalyzerRapper的代理分析器,则在shingle分析器有机会从停止字创建带状之前,停止字(“本例中的“this”和“is”)将被删除

调试分析器的一个好方法是使用类似于“Lucene in Action”中描述的AnalyzerUtils的东西。您可以在此处获得示例代码:


尼基塔

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

您在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)]
问题不在于Shingleanalyzerrapper本身,而在于QueryParser。我需要更多的挖掘来找出根本原因,但你给了我一些起点