1

我正在索引和搜索 5 个字段,这些字段以各种方式进行标记/过滤。
但是,我希望在搜索时,如果我输入的查询与字段 1 中的值匹配,它将是我返回的最高结果。
我将如何定义:

  1. 如果 100% 匹配,则以这种方式查询该字段优先

在我的架构中,我有该字段

<field name="na_title" type="text_names" indexed="true" stored="false" required="true" />

text_names 是:<fieldType name="text_names" class="solr.StrField" />

只有一个na_title="somthing is going here" 的条目。但是,当我搜索时, text_names:somthing is going on here我会得到很多结果。
需要指出的是,对于查询和索引操作,该字段上没有分析器或过滤器。

4

2 回答 2

1

手册

Lucene 允许通过“提升”多个级别来影响搜索结果:

  • 文档级别提升 - 在索引时 - 通过在将文档添加到索引之前调用 document.setBoost()。
  • 文档的字段级别提升 - 在索引时 - 通过在将字段添加到文档之前(以及在将文档添加到索引之前)调用 field.setBoost()。
  • 查询级别提升 - 在搜索期间,通过在查询子句上设置提升,调用 Query.setBoost()。
于 2012-09-27T16:52:29.543 回答
1

您需要对该字段进行两次索引——一次分析,一次不分析。然后,您可以将未分析字段中的匹配提升到其他字段。

一种快捷方式可能是将所有这些字段作为字符串进行索引,并使用 copyfield 将它们作为文本复制到一个包罗万象的字段中。这将稍微简化查询并减少重复字段的数量。

于 2012-09-27T19:28:50.010 回答