Lucene 7.1.0中的多字段短语查询,允许使用可选的通配符

时间:2018-01-14 16:18:30

标签: java search lucene

我已将一些维基百科网址以及这些网页的内容编入索引。我希望能够同时搜索这两个字段,或只搜索一个字段,并附加选项以允许任何给定字段上的通配符(虽然我不确定是否会使用通配符选项内容输入),所以我不仅可以找到

https://en.wikipedia.org/wiki/Polish_songs_(Chopin)

但我也可以找到

https://en.wikipedia.org/wiki/Fr%C3%A9d%C3%A9ric_Chopin

我有Lucene版本7.1.0并且无法完全掌握文档,因此我对SO进行了彻底搜索,并将我的代码基于以下Q& A(主要来自旧的Lucene版本,但功能性)似乎是一样的):

Exact Phrase search using Lucene?

How to do a Multi field - Phrase search in Lucene?

Phrase query in Lucene 6.2.0

How to match exact text in Lucene search?

根据上面的答案,我想出了一些关于如何使用以下输入进行搜索的想法:

假设:

Query q;
QueryParser qp;

/* I think this is fishy but do not know how to do it differently */
if (contentOnlySearch) {
  qp = new QueryParser("content", analyzer);
} else {
  qp = new QueryParser("url", analyzer);
}
/* end */

String urlQuery = "chopin";
String contentQuery = "polish songs that chopin wrote";
if (allowUrlQueryWildcards) {
  urlQuery = "*" + urlQuery + "*";
}
if (allowContentQueryWildcards) {
  contentQuery = "*" + contentQuery + "*";
}

创意1:

q = MultiFieldQueryParser.parse(
  new String[] {urlQuery, contentQuery},
  new String[] {"url", "content"},
  analyzer
);

创意2:

q = qp.parse("url:\"" + urlQuery + "\" AND content:\"" + contentQuery + "\"");

1。现在,这些方法和其他一些方法都失败了,我要么得到一个错误,要么经常找到一个不包含输入contentQuery的网站。我做错了什么?

附带问题:

2。如果我保存了大约10000个URL,那么允许通配符在这里是一个很好的选择,或者我应该稍微调整索引/搜索过程,以便能够通过输入" Chopin"来找到这两个URL?

第3。为什么lucene找到并索引"肖邦"在"(肖邦)",但不在" _Chopin"?

PS。我来自JavaScript,我希望我的Java代码是正确的,不会让你的眼睛流血。

0 个答案:

没有答案