当前位置: 首页 > 知识库问答 >
问题:

Lucene Analyzer查询和搜索结果相关性得分

裴理
2023-03-14

首先,对不起我的英语不好!

我是Lucene图书馆的新人(从上周三开始),我试图了解如何根据找到的术语获得匹配文档的最佳相关性级别。

我使用Lucene 4.10。0(无Solr)

我能够索引/搜索英语/阿拉伯语文本,以及支持这些文本的点击突出显示。

现在我有一个问题与搜索结果的相关性。

如果我在三个文档中搜索“穆罕默德·奥马尔”:

doc1.add(new TextField("contents", "xyz abc, 123 Mohammad Abu Omar 123", Field.Store.YES));
indexWriter.addDocument(config.build(taxoWriter, doc1));

doc2 = new Document();
doc2.add(new TextField("contents", "xyz abc, 123 Omar bin Mohammad 123", Field.Store.YES));
indexWriter.addDocument(config.build(taxoWriter, doc2));

doc3 = new Document();
doc3.add(new TextField("contents", "xyz abc, 123 Abu Mohammad Omar 123", Field.Store.YES));
indexWriter.addDocument(config.build(taxoWriter, doc3));
...etc

我得到同样的分数为这3文档。

看起来Lucene忽略了单词顺序,只是在比赛计数上得分。

我期望以下是最佳结果:

doc3、doc1、doc2

但是我得到:

doc1、doc2、doc3(分数相同)

为了在小写和子字符串中进行搜索,我使用如下扩展分析器:

   @Override
   protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
     Tokenizer source = new WhitespaceTokenizer(reader);
     TokenStream filter = new LowerCaseFilter(source);   
     filter = new WordDelimiterFilter(filter,Integer.MAX_VALUE,null);
     return new TokenStreamComponents(source, filter);
   }

知道怎么表演吗?

从这里开始:http://lucene.apache.org/core/4_10_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Boosting_a_Term

我认为增加查询条件和/或使用正则表达式可能是一种选择,但这意味着,我必须手动处理用户输入。难道没有“开箱即用”的解决方案(如函数、过滤器或分析器)吗?

非常感谢!

共有1个答案

丁阳羽
2023-03-14

您的Mohammad Omar查询在代码方面看起来如何?如果您只需要这个短语,请将此字符串输入PhraseQuery,或者如果您使用QueryParser,请将此短语包装成引号以生成PhraseQuery

如果您需要在搜索结果中同时使用此短语以及分别包含这两个术语的文档,您可以将“Mohammad Omar”作为短语(如上所述)和单独的术语包括在内,如下所示:some_字段:“Mohammad Omar”some_字段:Mohammad some_字段:Omar。您还可以为短语元素添加增强,以便短语结果排名更高。

 类似资料:
  • 问题内容: 我已经多次重温了这个问题,但我从未真正找到合适的答案。 是否可以执行MySQL搜索,以按相关性返回ACTUAL准确排序的结果? 我试图创建一个ajax搜索表单,当用户在输入字段中键入内容时提出建议,并且仅使用纯MySQL查询还没有找到合适的解决方案。我知道有可用的搜索服务器,例如ElasticSearch,我想知道如何仅使用原始MySQL查询来实现。 我有一张学校科目表。少于1200行

  • 创建新的。NET Framework 4.6.1控制台应用程序 为NEST 6.5.0和ElasticSearch.NET 6.5.0添加NuGet包 然后,我创建了一个新的弹性索引,其中包含具有“tags”属性的对象(类型为“mything”)。此标记是一组可能值中的随机逗号分隔的单词集。在测试中,我在索引中插入了100到5000项。我试了越来越少的可能的词在设置。

  • 我试图修改elasticsearch中的搜索得分,方法是将_score乘以存储在每个文档中的单个值的平方根。下面是我正在使用的JSON查询。我哪里出了问题? } 提前感谢您的帮助!

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢

  • 我正在LDAP服务器上工作。它有弹性搜索。我必须用一些Javascript代码(JSON格式)发送查询。 这是我的查询: 我试图打印所有结果,其中“server”=“server\u name”(该字段是server:server\u name…)。我认为关于弹性搜索的文档太小了。我找到了一些文档,但都是一样的,对新用户没有帮助。这个例子太简单了。 此查询返回所有结果,包括任何筛选器。 Ps:这就

  • 我已经完成了名称索引。它包含椅子、椅子等数据。 当我尝试用“cha”搜索时,它不会返回任何椅子。这是返回“毛毯”,我期待的文件有椅子。 下面是我的代码: 搜索请求: 搜索响应: } 映射: 我该怎么解决这个问题? 谢谢,Sri