首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用java语言合成词的Lucene SpanNearQuery

用java语言合成词的Lucene SpanNearQuery
EN

Stack Overflow用户
提问于 2013-08-01 12:21:27
回答 1查看 219关注 0票数 1

我在Lucene4.3版的SpanNearQuery上遇到了问题。我试着做这样的查询:

代码语言:javascript
复制
SpanTermQuery fleeceQ = new SpanTermQuery(new Term("content", "golden fleece"));
SpanTermQuery blackQ = new SpanTermQuery(new Term("content", "black"));
SpanQuery[] clauses = {fleeceQ, blackQ};
SpanNearQuery nearQ = new SpanNearQuery(clauses, 10, false);

在我的文档的“内容”领域,我有:“历史深情地注视着金色羊毛的黑色故事,但大多数人不同意。”

好吧,结果是查询什么也不给我。但是,如果我把“金色羊毛”改为“羊毛”,那就有效了,所以我想问题就出在复合词上。

我使用SpanNearQuery,因为我必须做一个接近搜索,我需要知道它发生了多少次。

有人知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 15:56:21

问题是“金羊毛”不是一个术语。这是两个术语,goldenfleece。但是,当你自己构造这个词时,你要用:

代码语言:javascript
复制
new Term("content", "golden fleece")

它会得到你的承诺,并使它成为一个单一的任期。没有匹配项,因为索引中不存在单个术语golden fleece

没有明确的方法将PhraseQuery合并到SpanNearQuery中,所以我认为创建另一个嵌套的SpanNearQuery来创建您要寻找的行为可能是有意义的:

代码语言:javascript
复制
SpanTermQuery goldenQ = new SpanTermQuery(new Term("content", "golden"));
SpanTermQuery fleeceQ = new SpanTermQuery(new Term("content", "fleece"));
SpanTermQuery blackQ = new SpanTermQuery(new Term("content", "black"));

SpanQuery[] subclauses = {goldenQ, fleeceQ};
SpanNearQuery goldfleeceQ = new SpanNearQuery(subclauses, 0, true); //No slop, in order!

SpanQuery[] mainclauses = {goldfleeceQ, blackQ};
SpanNearQuery finalQ = new SpanNearQuery(mainclauses, 10, false); //As before, 10 slop, any order
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17993929

复制
相关文章

相似问题

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