Ali*_*hya 5 java eclipse lucene search
当我尝试通过 Lucene 搜索多词短语时,我遇到了多个问题。
首先,这就是我对数据建立索引的方式:
IndexWriterConfig luceneConfig = new IndexWriterConfig(new StandardAnalyzer());
Path path = Paths.get("C:/Users/i_l_g/Desktop/DBpedia/qls_labels-textfield");
Directory dir = FSDirectory.open(path);
IndexWriter writer = new IndexWriter(dir, luceneConfig);
while (rs.next()) {
Document doc = new Document();
doc.add(new Field("entity", rs.getString("entity"), TextField.TYPE_STORED));
doc.add(new Field("label", rs.getString("label"), TextField.TYPE_STORED));
writer.addDocument(doc);
}
Run Code Online (Sandbox Code Playgroud)
正如您可能知道的那样,我只是从数据库中提取行并为其建立索引。
现在我正在尝试搜索与我的查询相似的双词短语,但问题是我得到了各种各样的句子。下面是我用来搜索短语的代码:
StandardAnalyzer analyzer = new StandardAnalyzer();
String query = "jodie foster";
QueryParser parser = new QueryParser("label", analyzer);
parser.setDefaultOperator(QueryParser.Operator.AND);
Query q = parser.parse(query);
Run Code Online (Sandbox Code Playgroud)
这里的问题是我得到了诸如朱迪·福斯特获得的奖项和提名列表之类的东西。这意味着包含搜索短语的句子也会被返回。
我也在尝试获取与我搜索的内容类似的短语。我在网上发现我需要执行模糊搜索,为此我必须将~符号附加到查询中。它适用于单个单词,但在上述查询中使用它时给我带来了问题。我尝试过类似的东西
String query = "\"jodie foster\"~";
Run Code Online (Sandbox Code Playgroud)
我将最小相似度设置为 0.1 以确保它正常工作
parser.setFuzzyMinSim(0.1f);
Run Code Online (Sandbox Code Playgroud)
但我得到的结果与第一次尝试完全相同(没有模糊搜索)
我还尝试在每个单词前面添加〜 :
String query = "jodie~ foster~";
Run Code Online (Sandbox Code Playgroud)
但这会导致程序搜索包含类似于jodie AND grant的单词的短语,而我真正需要的是找到一个与短语 jodie grant类似的短语作为一个整体,而不是逐字逐句地查找。
我的最后一个问题是:如何对 n 个单词的短语进行模糊搜索并找到相似的匹配项,同时忽略包含该短语的长句子?
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |