在Lucene3.6中,如何对含有符号、数字、英文单词的字段模糊搜索

scu_wein 发布于 2013/07/21 15:32
阅读 1K+
收藏 0

比如说一个字段“website”吧,例:http://www.baidu.com,怎么实现模糊搜索出这条记录,建索引用什么分析器,StandardAnalyzer?还是?如何把字段添加到文档中,是这样吗?document.add(new Field("province", rs.getString("province"), Field.Store.YES, Field.Index.ANALYZED));

在搜索的时候,用什么Query呢?我以为可以用SpanNearQuery,但这貌似只适合于全中文字段的模糊查询,存在英文数字或者符号都搜索不到,哪怕是精确查找都查不到,如果用TermQuery呢,就只能实现精确查询,这该怎么办呢?求高手解答!谢谢!

加载中
0
罪恶的花生
罪恶的花生
主域名单独取出,存储时不分词就行了。
scu_wein
scu_wein
你好,请问具体怎么做呢?我是才接触Lucene,不太熟悉啊
0
夜雨声烦
夜雨声烦
显然不是主题域名单独取出不分词。除非你保证输入的已经是不能再分的词了。。。
scu_wein
scu_wein
那请问是什么原因呢?我建索引用的是StandardAnalyzer,我看书中说,对于数字和日期,需要用StandardAnalyzer或者WhitespaceAnalyzer,存储website或者phone这些字段的时候,都是分词后存入的,对于字段里含有中文字的,输入中文字可以查询到,但是含有符号、数字、英文字母的话根本查询不出来。
0
夜雨声烦
夜雨声烦

1、不分词,做个索引域A,模糊或者通配符搜索

2、分词,做个索引域B,用分词搜索;

3、不考虑性能,A、B 用should或起来搜索,几乎就没什么搜不到。B的分词器有中文用IK好点。

scu_wein
scu_wein
第2种方法具体怎么做啊?做个索引域B?搜索的时候貌似只能选择分析器和查询器,就是Analyzer和Query,可以用StandardAnalyzer创建索引和搜索吗?我之前用的SpanNearQuery来保证搜索结果中要包含所有的查询语句所有的词。
0
夜雨声烦
夜雨声烦

很多种分词的方法。例如IK,例如庖丁。

0
夜雨声烦
夜雨声烦
一个域上,可以同时做成多种索引的。例如“中国”,索引是可以同时做成“中”、“国”、“中国”3个索引,同一个域,用document.addField(记不清了),是可以重复的。
0
fr_kaka
fr_kaka

以前也遇到过。注意检索的时候用的分析器应该和你建立索引的时候用的是一样的。

我现在的做法是keyword(要检索的词)先用分析器转化成一个个Token分别加入到Query(查询条件)中。貌似ParserQuery也能用,不过要注意一些特殊字符的转义。

返回顶部
顶部