solr - 无法在 solr 5.3.1 中排除部分字符串?

标签 solr solrj

字符串是:- <GET:notes/count><GET:notes/search_note><GET:util/codemaps/([^/]+?)><GET:users/pending_requests><GET:users/pending_activation><GET:users/firstnames><GET:users/profile><GET:tasks/tasks/count><GET:school/schools/count><GET:school/classrooms/count><GET:quiz/count><GET:quiz/quizset/count><GET:notes/([^/]+?)><GET:locations/counties/count><GET:lesson/books/count><GET:general/codemaps/([^/]+?)><GET:discussions/topics/count><GET:admin/sessions><GET:admin/sessions/count><GET:admin/sessions/([^/]+?)><PUT:content/actions><POST:content/html/totext><GET:content/multimedia/images/([^/]+?)/([^/]+?)>

我的查询是:

<pre>log_message:"*emaps/\(\[\^/\]\+\?\)\>*"</pre>

这里log_message是字段,类型是

text_std_token_lower_case
Tokenizer are:

<fieldType name="text_std_token_lower_case" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

最佳答案

您选择的分词器 (StandardTokenizerFactory) 会忽略标点符号。如果您转到 Solr 管理 UI 中的分析页面,您可以看到这一点。这将影响您的查询和字段的标记化。您将需要一个不会省略标点符号的分词器。

一个可能的选择是使用 Solr wiki (https://cwiki.apache.org/confluence/display/solr/Tokenizers) 上记录的正则表达式分词器,也许您正在寻找这样的东西?

<analyzer>
  <tokenizer class="solr.PatternTokenizerFactory" pattern="(>?<(PUT|GET|POST):)|>\s"/>
</analyzer>

如果 url 可以包含 > 未经过 % 编码的字符,或者可能是 HEAD 等,则可能需要进行一些调整。我不相信这会很好地执行,但是因为正则表达式可能会变得昂贵。如果这让事情陷入困境,您可能需要编写自己的分词器。

关于solr - 无法在 solr 5.3.1 中排除部分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33368917/

相关文章:

elasticsearch - elasticsearch对象的最佳大小是多少

solr - 如何在 SOLR 中索引 .html 文件

XML 格式的 solr 原子更新

java - Solr 8.1启动错误-maxBooleanClauses

ruby-on-rails - 如何为多个模型的查询排序 Sunspot 搜索结果?

java - MongoDB Solr 搜索以在单个搜索请求中获取文档关系

lucene - 基于多个字段的 Solr/Lucene 拼写检查建议

java - 我可以对较低版本(5.xx 或 4.xx)的 solr 服务器使用 solrj (版本 - 6.6.3 )客户端库吗?

solr - 为什么我在使用 SolrJ 和 SolrCloud 时会得到 "KeeperErrorCode = NoNode for/clusterstate.json"?

java - Apache Solr 核心架构从 4.x 升级到 5.x(或更高版本)