【问题标题】:solr sanitizing querysolr 清理查询
【发布时间】:2009-07-15 19:50:19
【问题描述】:

我正在使用 solr 和 ruby​​ on rails。 一切正常,我只需要知道是否有任何现有代码来清理用户输入,例如以 ? 开头的查询或 *

【问题讨论】:

    标签: ruby-on-rails ruby solr


    【解决方案1】:

    我不知道有什么代码可以做到这一点,但理论上可以通过查看 parsing code in Lucene 并搜索 throw new ParseException 来完成(只有 16 个匹配项!)。

    在实践中,我认为您最好在代码中捕获任何 solr 异常并显示“无效查询”消息或类似的信息。

    编辑:这里有几个“消毒剂”:

    【讨论】:

      【解决方案2】:

      如果您在 PHP 中使用Solarium,那么您可以使用Solarium_Escape::term() 方法。

      /**
       * Escape a term
       *
       * A term is a single word.
       * All characters that have a special meaning in a Solr query are escaped.
       *
       * If you want to use the input as a phrase please use the {@link phrase()}
       * method, because a phrase requires much less escaping.\
       *
       * @link http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping%20Special%20Characters
       *
       * @param string $input
       * @return string
       */
      static public function term($input)
      {
          $pattern = '/(\+|-|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\\)/';
      
          return preg_replace($pattern, '\\\$1', $input);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-31
        • 2011-05-27
        • 2019-03-07
        • 2021-09-30
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多