我正在尝试添加搜索功能,允许用户通过电子邮件地址(如果有的话)查找潜在的朋友,或者如果不这样做,则按名称查找。我现在正在看Lucene,但我愿意考虑其他解决方案。我正在尝试创建一组文档:
| id | text | text |
| 1234 | a@b.com | John Doe |
| 1235 | ab@c.com | Jane Doe |
| 1236 | c@ba.com | Madonna |
(是的,text
被指定为乘法)
全部用
索引new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_40, new KeywordAnalyzer()));
然后我用:
进行搜索TopDocs results = mySearcher.search(
new FuzzyQuery(new Term("text", term), 2, 0),
10);
我可以使用电子邮件进行搜索。搜索a@b.com
,ab@c.com
所有工作。我也可以搜索像Madonna
这样的单字名称。但是一旦我试图找到多字的名字,它就会崩溃。搜索John
,Jane
,John Doe
或Doe
都不会返回任何结果。
我很想要一个更好的方法(对于两个编辑距离匹配可以带我多远的明显限制),以及我如何使多字匹配工作。
答案 0 :(得分:-1)
对于多字匹配,我会查看您的分析器,并将analyze.yes / analyze.no设置传递给每个文档中的每个字段。
分析器会对搜索进行标记,但如果您不使用相同的分析器实例进行搜索和索引,则会出现各种奇怪的空白行为 - 除其他外。