`

Solr query检索词特殊字符的处理

    博客分类:
  • Solr
阅读更多

solr是基于 lucence开发的应用,如果query中带有非法字符串,结果很可能是检索出所有内容或者直接报错,所以你对用户的输入必须要先做处理。输入星号,能够检索出所有内容;输入加号,则会报错。

官方的处理办法(Java,因为solr是java开发的):

 

    https://svn.apache.org/repos/asf/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java  
      
    public static String escapeQueryChars(String s) {  
        StringBuilder sb = new StringBuilder();  
        for (int i = 0; i < s.length(); i++) {  
          char c = s.charAt(i);  
          // These characters are part of the query syntax and must be escaped  
          if (c == '\\' || c == '+' || c == '-' || c == '!'  || c == '(' || c == ')' || c == ':'  
            || c == '^' || c == '[' || c == ']' || c == '\"' || c == '{' || c == '}' || c == '~'  
            || c == '*' || c == '?' || c == '|' || c == '&'  || c == ';' || c == '/'  
            || Character.isWhitespace(c)) {  
            sb.append('\\');  
          }  
          sb.append(c);  
        }  
        return sb.toString();  
      }  

 

翻译的php版本(利用preg_replace函数进行正则替换):

 

    static public function escape($value)  
    {  
        //list taken from http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping%20Special%20Characters  
        $pattern = '/(\+|-|&|\||!|||\{|}|\[|]|\^|"|~|\*|\?|:|;|~|\/)/';  
        $replace = '\\\$1';  
      
       return preg_replace($pattern, $replace, $value);  
    }  

 翻译后的python版本:

    import re  
    def escape_solr(word):  
        return re.sub('(\\\|\+|-|&|\|\||!|||\{|}|\[|]|\^|"|~|\*|\?|:|;|/|\~)','\\\1', word )  

 

 

 

分享到:
评论

相关推荐

    solr搜索自动补全

    Suggest.js插件的作用是,在用户开始输入查询词的时候,通过与Solr服务器交互,快速检索出可能的补全词项,并将其显示给用户。 使用suggest.js插件,开发者需要进行以下几个步骤来完成自动补全功能的开发: 1. ...

    solr分词器使用手册

    - **分词器**:在全文检索系统中,分词器扮演着非常重要的角色,它负责将输入的文本字符串切分成一个个有意义的词汇单元(即“词”),这一过程对于提高搜索的准确性和效率至关重要。 - **目的**:通过分词处理,...

    solr6.6-IK

    分词是自然语言处理中的基础步骤,中文文本由于没有明显的空格或标点符号来指示单词边界,因此需要通过特定算法来识别词语。IK 分词器采用了多种算法,包括基于词典的匹配、统计模型等,能有效处理歧义、新词识别等...

    Solr入门使用详解.zip

    Solr支持多种数据类型,包括字符串、数字、日期等,并且允许对数据进行复杂的查询和排序。通过创建索引,Solr能够实现全文搜索,即在用户输入部分关键词时,返回与之相关的所有文档。 在Solr的使用过程中,我们需要...

    Solr 查询,索引

    Solr查询与索引是Apache Solr的核心功能,它是一个基于Lucene的开源搜索引擎服务器,提供了高效、可扩展的全文检索、命中高亮、 faceted search(分面搜索)、拼写检查、动态集群等特性。在本文中,我们将深入探讨...

    solr7 的 ik分词器

    Solr7的IK分词器是针对中文文本检索的一个重要工具,它在全文检索领域扮演着关键角色。IK Analyzer是一款开源的、适用于Java环境的中文分词组件,专为提高中文信息处理的效率和准确性而设计。在Solr7版本中,IK分词...

    solr1.4教程

    - Query解析与处理:包括QueryParser、QParserPlugin等,负责解析查询语句并生成查询对象。 - HighLighting(高亮显示):提供文本片段的高亮功能。 - Update处理:负责文档的添加、删除和更新操作。 - Faceting(分...

    solr学习笔记

    - 可选查询:无特殊符号,词之间用空格分隔 3. 布尔操作: - AND:`word1 AND word2` 等同于 `+word1 +word2` - OR:`word1 OR word2` 等同于 `word1 word2` - NOT:`+word1 NOT word2` 等同于 `+word1 -word2` ...

    solr schema solrconfig 配置文件解析

    `solrconfig.xml`文件定义了Solr服务器的行为,包括索引和查询处理、更新处理链、请求处理器、缓存策略等。 - **请求处理器(Request Handlers)**: 指定Solr如何响应不同的HTTP请求,如查询、添加、删除等。 - **...

    Apache_Solr_初级教程

    - Lucene 能够处理各种文本数据,并且已经被广泛应用于多个领域,如文档检索、网站搜索等。 3. **Solr 与 Lucene 的关系**: - Solr 基于 Lucene 构建,可以说 Solr 是 Lucene 的服务器化版本。 - Solr 提供了更...

    solr的使用入门以及相关配置文件的解释

    3. 查询分析器(Query Parsers):定义如何解析用户的查询字符串,如标准查询解析器(Standard Query Parser)或Lucene查询解析器。 4. 分析器(Analyzers):在索引和查询时,Solr使用分析器将输入的文本分解为可...

    开源企业搜索引擎SOLR的应用教程

    - **1.3.2 搜索**:用户通过提交查询请求到Solr,Solr根据请求条件从索引中检索数据并返回结果。 #### 二、Solr的安装与配置 **2.1 在Tomcat下Solr安装** - **2.1.1 安装准备**:确保已安装Java环境和Tomcat...

    SOLR学习笔记

    在Schema中,每个字段都有其特定的数据类型,如字符串、整数、日期等,这决定了字段如何被索引和处理。 1. **字段类型(Field Types)**:定义字段的数据类型和解析逻辑。例如,`text_general`类型适用于全文搜索,...

    lucene全文检索教程

    用户输入的查询字符串会被解析成一系列的查询项,这些项可以是单个词、短语或者更复杂的查询结构,如布尔表达式。Lucene支持多种查询类型,如匹配所有(Match All)、精确匹配(Term Query)、短语匹配(Phrase ...

    分词器6659282.zip

    这在处理特殊格式的数据,如URL、电子邮件地址或者专有名词时非常有用。 在实际应用中,为了提升搜索体验,我们还需要关注其他组件,如过滤器(Filter)和查询分析器(QueryAnalyzer)。过滤器可以进一步修改分词器...

    learnlib-core-0.10.1.zip

    mmseg4j采用四元组(四字节)编码方式,解决了中文字符集处理的问题,同时引入了动态最大匹配算法,能够有效避免过长或过短的分词结果。此外,它还支持自定义词典,允许用户根据实际需求添加或删除词汇,提高了分词...

    全文检索(Lucene)详解

    - **分布式搜索**: 通过Solr或Elasticsearch等工具,实现跨服务器的分布式搜索,处理大规模数据。 - **内存缓存**: 利用缓存技术提高搜索性能,如使用FilterCache存储过滤器结果,TermQueryCache存储常见查询结果...

    Lucene全文检索引擎

    3. **搜索**:用户输入查询后,QueryParser将查询字符串转化为Query对象,然后使用IndexSearcher执行查询。 4. **结果排序**:根据评分系统,Lucene会返回得分最高的文档。 5. **文档检索**:找到相关文档后,使用...

Global site tag (gtag.js) - Google Analytics