基于Solr规则的提升

时间:2015-06-03 13:34:06

标签: java solr solrj

我正在使用 Solr-5.0.0 。我在一个字段product_name上搜索。 我需要添加一些规则来获得相关结果。

  1. 如果我搜索一个单词,如果存在完全匹配,则应首先进行。 例如:如果我搜索laptop,则应首先使用笔记本电脑返回确切的product_name

  2. 如果我搜索多个单词,它应该遵守规则1.并且最少的单词长度距离名称首先出现。 例如:如果我搜索dell laptop,它应该首先返回戴尔笔记本电脑而不是 dell inspiron laptop

  3. 如果我搜索字词,则不应返回包含withwithout字词的结果。 例如:在搜索laptop bag中,它不应该首先给包含或 dell笔记本电脑的戴尔笔记本电脑没有包结果。

  4. 如何在查询时实现这些基于搜索相关结果的规则?

    我的应用程序是在java中,所以赞赏Java答案。

1 个答案:

答案 0 :(得分:2)

首先,您应该使用dismaxedismax查询解析器而不是默认(lucene)。

然后,您可以使用不同的参数来提高相关性:

  1. :使用qf来提升product_name字段。
  2. :使用pf来提升您的product_name字段,其中q参数中的所有字词都显示在附近。
  3. :使用bq来增加未显示function validateEmail(email) { var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; return re.test(email); } var str = "abc@abc.com;abc@abc.com; abc@a@bc.com ; abc@abc.com ;abc@abc.com;" var emails = str.split(';'); var invalidEmails = []; for (i = 0; i < emails.length; i++) { if(!validateEmail(emails[i].trim())) { invalidEmails.push(emails[i].trim()) } } alert(invalidEmails); with字词的文档。 See here。例如:without