首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate Search ShingleAnalyzerWrapper工作示例

Hibernate Search ShingleAnalyzerWrapper工作示例
EN

Stack Overflow用户
提问于 2011-03-10 09:59:44
回答 2查看 1.3K关注 0票数 1

我正在使用hibernate-search-3.2.1 input,并希望将我的输入解析为带状疱疹。根据我在文档中所看到的,ShingleAnalyzerWrapper似乎正是我所需要的。我已经使用WhitespaceAnalyzer、StandardAnalyzer和SnowballAnalyzer作为ShingleAnalyzerWrapper的默认分析器进行了测试。

代码语言:javascript
复制
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的期望和用法是否正确。

谢谢你,莱恩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

尼基塔

票数 2
EN

Stack Overflow用户

发布于 2011-07-07 02:25:20

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

你在AnalyzerUtils上的链接帮了我很大的忙,因为我能够使用下面的代码来生成瓦片:

代码语言:javascript
复制
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);
}

这会产生:

代码语言:javascript
复制
[(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。我需要更多的挖掘来找出潜在的原因,但你给了我一些开始的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5254599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档