solr返回部分匹配结果

2019-03-27 01:04|来源: 网路

这里的“部分匹配”,是指返回的结果没有完全匹配所有搜索的关键词。

DisMaxQParserPluign里有一个参数mm(Minimum 'should' match),设置整个搜索关键词中最小需要匹配的数量。这里给出例子

  • "2" : 无论关键词一共有多少,doc最少需要匹配2个
  • "75%" : doc最少需要匹配75%的关键词,关键词个数向下取整。
  • "2<-25%" : 关键词少于3个的时候,doc需要全部匹配;大于等于3个的时候,doc最少需要匹配75%
  • "2<-1 5<80%" : 关键词少于3个的时候,需要全部匹配;3-5个的时候,只能有一个不匹配;大于5个的时候,最少需要匹配80%

默认mm为100%,也就是所有关键词都必须有匹配。即使在schema.xml里设置operator为OR,也要受到mm的限制,也就是无法全部匹配关键词的doc都不在结果集中。

参考文档:http://wiki.apache.org/solr/DisMaxQParserPlugin#mm_.28Minimum_.27Should.27_Match.29


转自:http://www.cnblogs.com/sleepingfire/archive/2011/09/21/2183821

相关问答

更多
  • upvoted @Mrbuubuu,但你可以做到这一点作为原型,并通过过滤器元素通过.contains更多mootools-ish和迎合中间的匹配,如'cd'应该返回结果。 例如,一系列品牌,其中一个是品牌,一个搜索north的用户应该返回匹配的品牌,但不会因为他们错过the 此外,在比较值时,您需要确保搜索字符串和堆栈数组元素的大小写不变。 以下是一个可用的输入示例: http : //jsfiddle.net/dimitar/M2Tep/ (function() { Array.implemen ...
  • 是。 你是对的。 在上述情况下,您需要将maxGramSize增加到15以上才能获得所需的结果/输出。 但在此之前,你真的需要一个词分成多个单词。 我的意思是你的搜索标准是什么? 你想要部分单词搜索吗? 例如:当用户使用“vedlikeh”搜索时,您希望他显示“vedlikeholdsskjema”的结果。 这是部分单词搜索。 如果是要求那么你应该继续增加maxGramSize。 但我认为如果你没有这样的要求那么就没有必要增加索引的大小。 你应该选择更简单的字段类型。 根据您的要求,使用现有产品或创建自己的 ...
  • 您需要为字符串定义字段类型。 (我希望你已经定义了这个) 提交的定义是正确的。 您可以使用简单的查询来搜索相同的内容 q=name:"one blue car"&rows=100&wt=json&indent=true 您不需要定义 ...
  • 这有点难,因为任何3个节点中的任何一个孩子都会匹配这个条件。 所以你在那里创造的是一个交叉产品。 在Neo4j 2.2.0中你可以试试这个: MATCH (c1:node),(c2:node), (c3:node) USING INDEX c1:node(name) USING INDEX c2:node(name) USING INDEX c3:node(name) WHERE c1.name = "Tobin" AND c2.name ="John" AND c3.name ="Clarke" MATC ...
  • 在Cassandra中没有这样的通配符支持,但是您可以以这样的方式对数据建模,以便获得相同的最终结果。 您将获取要执行此查询的列,并将其反规范化为第二列族。 此CF将具有单个宽行,其列名称为要进行通配符查询的col的值。 此CF的列值可以是原始CF的行键,也可以是原始行的其他表示形式。 然后你将使用切片来获得你关心的值。 例如,如果这是要切片的宽行: +---------+----------+--------+----------+---------+--------+----------+ | R ...
  • 我会这样做: $search_ids = '2,7'; //dummy data $q = ''; $ids = explode(',', $search_ids); foreach ($ids as $id) { $q .= (strlen($q) == 0)?'':' AND'; $q .= ' FIND_IN_SET(\''.$id.'\', attribute_id) > 0'; } $q = 'SELECT product_id FROM product_attributes ...
  • 您需要将输出传输到另一个程序,如cut: egrep ^artistName | cut -d ' ' -f 2- 或者你可以在awk或sed中完成整个事情: awk -F ': ' '/^artistName/ {print $2}' sed -n '/^artistName/ {s/.*: //;p;}' You'll need to pipe the output to another program, like cut: egrep ^artistName | cut -d ' ' -f 2- ...
  • 感谢报告这个和好抓! 你是对的,在与Node( 这里 )比较时冒犯了这一行。 我创建了一个拉取请求来解决这个问题。 Thanks for reporting this and good catch! You are right, the offended line is this one when comparing with Node (here). I created a pull request to fix this.
  • 在我的分页中我犯了愚蠢的错误。 计算出的值是start = 1,因此它跳过了第一个结果。 固定。 Stupid mistake on my part in paging. The calculated value was start = 1, so it skipped the first result. Fixed.
  • 有一个访问方法! 如果你在窗体上有“过滤器”控件,为什么不使用Application.buildCriteria方法,它将允许你将过滤标准添加到一个字符串中,然后从这个字符串中过滤出一个过滤器,并构建你的WHERE条款在飞行? selectClause = "SELECT TabCustomers.* FROM TabCustomers" if not isnull(Forms!FrmSearchCustomer!SearchMember) then whereClause = whereClaus ...