lucene搜索问题

使用IKAnalyzer作为分词器,在索引中写入如下两个域:TextFieldfield1=newTextField("content","hello你好",Store.... 使用IKAnalyzer作为分词器,在索引中写入如下两个域:
TextField field1 = new TextField("content","hello你好",Store.YES);
TextField field2 = new TextField("content","Yello你好",Store.YES);

在搜索的时候
Term term = new Term("content", "Yello你好");
TermQuery termQuery = new TermQuery(term); //搜索不到

Term term = new Term("content", "Y*");
WildcardQuery wildcardQuery = new WildcardQuery(term);//搜索不到

String params ="(content:"+"Y*)";
QueryParser parser = new QueryParser(params, new IKAnalyzer());
Query query = parser.parse(params);//能搜索到,结果是""hello你好"

求解释一下为什么前两个query搜索不到,而第三个搜索到的是错的? 怎么修改才能查找到正确的结果
展开
 我来答
1039725910
2016-11-18 · TA获得超过318个赞
知道小有建树答主
回答量:364
采纳率:100%
帮助的人:260万
展开全部

创建索引时,因为是TextField,所以会进行分词,IKAnalyzer把Yello你好会分成Yello和你好,所以你第一个termQuery搜索不到信息。改成new Term("content", "你好")

或new Term("content", "yello")就能搜索到了

StringField是不分词的

追问
现在的问题是搜索出来的结果为什么是错的,按照你给的提示我用以下的代码去搜索
Term term = new Term("content", "hello");
搜索的结果居然是 "Yello你好"

使用"你好"作为关键字搜索的结果也是"Yello你好"
还有你看第三个 我用表达式("content:Y*")来搜索是不是应该搜索出"Yello你好"而不是"hello你好"
匿名用户
2018-03-05
引用1039725910的回答:


创建索引时,因为是TextField,所以会进行分词,IKAnalyzer把Yello你好会分成Yello和你好,所以你第一个termQuery搜索不到信息。改成new Term("content", "你好")
或new Term("content", "yello")就能搜索到了
StringField是不分词的
展开全部
虽然这个问题过去很久了,但是给后来的人解释下----第三个 用表达式("content:Y*")来搜索是不是应该搜索出"Yello你好"而不是"hello你好"----那是因为 你给content设置了两个值啊,一个field1一个field2,分词名称都是content
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式