2012-09-27 137 views
1

我索引和搜索5场,这是记号化/以各种方式过滤。
但是,我想,当我搜索,如果我输入的查询现场1的值相匹配,这将是顶部结果我回去。
我如何定义:如何执行精确匹配以获得最高优先级?

  1. 领域
  2. 以这样的方式这一领域获得优先权,如果有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 =“财产以后是怎么回事”只有一个条目。但是,当我搜索 text_names:somthing is going on here我收到很多结果。
只是指出来,有在那场没有分析,也没有过滤器,无论是查询和索引操作。

回答

1

manual

的Lucene允许通过 “提高” 影响搜索结果超过 一层:

  • 文档级提升 - 而索引 - 通过调用 document.setBoost( )在将文档添加到索引之前。
  • 文档的字段级别提升 - 索引时 - 通过在向文档添加字段之前(以及在 将文档添加到索引之前)调用 field.setBoost()。
  • 查询水平提高 - 在 搜索,通过设置查询子句的提升,呼吁 Query.setBoost()。
+0

我提高持有标题^ 20,以及当我查询该字段的字段,并没有帮助。 –

1

您需要对字段进行两次索引 - 一次分析,一次未分析。然后,您可以在未分析的字段中提高匹配度。

一个快捷方式可能是将所有这些字段索引为字符串,并使用复制字段将它们作为文本复制到全部收录字段中。这会简化查询,并减少重复字段的数量。

+0

不起作用,我编辑了我试过的问题 –

+0

附加结果是否包含查询的任何部分,或者它们只是随机文档?我会通过分析页面运行该字符串,并确保这是真正的未分析。此外,debugQuery可能会揭示这些额外结果来自何处。 –

+1

解决方案在这里炒作,看到之前您的评论... ... http://stackoverflow.com/questions/2630879/solr-exact-word-search –