【问题标题】:What is the difference between dismax and EdisMax?dismax 和 EdisMax 有什么区别?
【发布时间】:2012-11-28 09:32:22
【问题描述】:

我想知道 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产生结果。这就是我想知道的......

【问题讨论】:

    标签: solr edismax dismax


    【解决方案1】:

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

    查看SOLR-1553

    开始(如在文档中):-

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

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

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

    通读 JIRA 真的很有洞察力:)

    【讨论】:

      【解决方案2】:

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

      1. DisMax Query Parser
      2. Extended DisMax Query Parser

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        • 2012-02-06
        • 2011-02-25
        相关资源
        最近更新 更多