Solr/Lucene escape char handling

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

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

org.apache.solr.client.solrj.util.ClientUtils.java

/**
   * See: {@link org.apache.lucene.queryparser.classic queryparser syntax} 
   * for more information on Escaping Special Characters
   */
  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();
  }






转自:http://my.oschina.net/u/138995/blog/204638

相关问答

更多
  • @darkheir:Lucene和Solr是两个不同的Apache项目,一起工作,我不明白每个项目的目的是什么。 1)Solr在底漆下使用Lucene。 Lucene没有关于Solr API的线索。 2)Lucene是一个功能强大的搜索引擎框架,可以让我们为我们的应用程序添加搜索功能。 它暴露了一个易于使用的API,同时隐藏所有与搜索相关的复杂操作。 任何应用程序都可以使用这个库,而不仅仅是Solr。 3)Solr是围绕Lucene建造的。 Lucene不仅仅是一个http包装,而且已经知道可以向Lucen ...
  • 我一直无法重现这一点。 你不指出你的硬件平台是什么,或者当你用最小的init文件开始时,问题是否仍然存在。 我搜索了一下,发现了一个类似的错误报告: http : //comments.gmane.org/gmane.emacs.bugs/15859 。 该用户在Windows上,通过删除他们在init文件中的键绑定来纠正问题。 I haven't been able to reproduce this. You don't indicate what your hardware platform is o ...
  • 在源代码中我可以看到,在创建CSVStrategy时设置了转义值,如果提供了不同的值,则只设置为不同的值。 所以我认为没有办法让Solr跳过逃生。 CSVStrategy mvStrategy = new CSVStrategy(strategy.getDelimiter(), CSVStrategy.ENCAPSULATOR_DISABLED, CSVStrategy.COMMENTS_DISABLED, '\\', false, false, false, false, "\n"); 我唯一 ...
  • 要获得更高的精确匹配,您可能需要在您的字段中搜索将提供所有匹配,而第二个搜索将仅产生完全匹配(具有一些提升)。 为避免在查询中使用星号(它们会减慢搜索速度),您可以在架构中使用NGramFilterFactory 。 请记住,您的查询可能如下所示: q=1234&qf=ngram_text_field,simple_text_field^2&defType=edismax 有关更多信息edismax To score exact matches higher you might need to searc ...
  • Lucene是一个用Java构建的搜索库,而Solr和Elastic Search(ES)是使用Lucene的Web应用程序。 在大多数情况下,您更喜欢Solr或ES到Lucene,主要是因为开箱即用的机制:多个节点上的分布式搜索,复制,分片和索引管理。 因为使用自定义Java应用程序和Lucene很难实现和维护这样的机制。 你会选择Lucene: 要有更多的控制权,因为它只是一个没有严格依赖关系的jar; 你不希望被任何特定的服务器约束; 您不希望构建自动化以在生产中部署Solr或ES(使用他们的服务器, ...
  • Lucene使用Vector空间模型的概念来计算文档的分数。 总之,查询和文档可以看作是矢量。 为了计算特定查询的文档分数,Lucene计算每个文档向量与查询向量的距离。 VSM查询附近的文档越多,分数越高。 你可以通过查看Lucene的Similarity类和Lucene的Scoring文档来获得更多的细节。 Lucene uses concepts from the Vector space model to compute the score of documents. In summary, que ...
  • 从C ++ 11开始,此功能(ala c#verbatim string literal)可用。 您可以使用如下的原始字符串文字: const char* s = R"( " " " \n \a )"; cout << s; 打印: " " " \n \a 原始字符串以R"(开头R"(并以...结尾)" This feature (ala c# verbatim string literal) is available starting with C++11. You ...
  • 为什么用字面反斜杠为转义字符添加前缀? 实际上,如LOAD DATA INFILE语法中所述 : 如果不为空,则FIELDS [OPTIONALLY] ENCLOSED BY和FIELDS ESCAPED BY值必须是单个字符。 因此: LOAD DATA LOCAL INFILE 'C:\\xampp\\tmp\\php1E14.tmp' INTO TABLE `TableName` FIELDS TERMINATED BY ';' ENCLOSED BY ...
  • 我们可以定制嵌入在Solr中的Lucene吗? 是的,你可以 。 但请记住这一点: Lucene和Solr提交者是全文搜索领域的一些最重要的专家。 他们在这个领域有多年的经验。 如果你认为你可以比他们做得更好,那么继续改变Solr以满足你的需求(它是Apache许可的,所以没有任何商业限制),如果你这样做,试着这样做,以便你以后可以贡献它回到项目,这样每个人都可以受益,项目也会向前发展。 对于绝大多数Solr用户而言,库存产品绰绰有余并满足所有需求。 换句话说,在进入更改代码之前,在邮件列表(stackov ...
  • 从" , ' , ? , \ , a , b , t , n , v , f , r列表中搜索匹配的可接受转义字符 char ab_to_escape(char a, char b) { if (a == `\\`) { static const char *escapev = "\"\'\?\\abtnvfr"; static const char *escapec = "\"\'\?\\\a\b\t\n\v\f\r"; char *p = strchr(escapev, b) ...