25

我想知道 DisMax 和 EDisMax 有什么区别..?有什么有用的参考资料可以了解。另外,我想知道哪些查询 DisMax 未能产生 EDisMax 能够产生结果的结果..?

EDisMax 有一些查询参数,如 boost 参数、ps 参数、pf2 参数;但是除了这个查询参数,EDisMax 比 DisMax 好多少;如何在这两者之间处理查询。是什么因素使 EDisMax 比 DisMax 做得更好

一些查询未能在 DisMax 中给出结果,但 EDisMax 给出了这些查询的结果。

我用谷歌搜索了 DisMax 和 EDisMax 之间的区别。我发现,EDisMax中用到的参数只是DisMax和EDisMax的区别;但我期待一些技术上的东西可以在演示中向其他人解释。

http://ip:8983/solr/C73/select/?defType=edismax&q=ipod OR video&fl=filename, score&hl=true&hl.fl=content contentenstem filename&hl.zetaContentField=content

对于上述查询,EDisMax 产生大约 238 个结果;但 DisMax 产生 0 结果。那么这两个解析器处理这个查询有什么区别;是什么让EDisMax产生结果。这就是我想知道的......

4

2 回答 2

27

由于 Dismax 有很多限制,所以添加了 EDismax 查询解析器。

查看SOLR-1553

首先(如在文档中): -

扩展的 dismax 解析器基于原始的 Solr dismax 解析器。

  • 在没有语法错误的情况下支持完整的 lucene 查询语法
  • 支持“and”/“or”在lucene语法模式下表示“AND”/“OR”
  • 当出现语法错误时,会改进特殊字符的智能部分转义以防止它们发生……在这种模式下,仍然支持字段查询、+/- 和短语查询。
  • 通过单词二元组改进邻近度提升......这可以防止需要文档中 100% 的单词才能获得任何提升,以及将所有单词放在单个字段中的问题。
  • 高级停用词处理...查询的强制部分不需要停用词,但在邻近提升部分仍然使用(如果已编入索引)。如果查询包含所有停用词(例如 to be 或 not to be),那么所有停用词都是必需的。
  • 支持 "boost" 参数.. 像 dismax bf 参数,但乘以函数查询而不是添加它
  • 支持纯负嵌套查询...所以像 +foo (-foo) 这样的查询将匹配所有文档

但是,正如您会使用许多相关的 JIRA 来提高查询解析能力并支持更多功能一样。

通读 JIRA 真的很有见地:)

于 2012-11-28T12:20:30.717 回答
4

一般来说,EDisMax 是 DisMax 的扩展版本。您可以在以下链接中找到两个解析器的良好描述和差异。

  1. DisMax 查询解析器
  2. 扩展的 DisMax 查询解析器
于 2012-11-28T09:45:31.557 回答