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

时间:2015-10-27 13:10:10

标签: 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是:

<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>

1 个答案:

答案 0 :(得分:1)

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

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

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

如果网址可以包含&gt;,则可能需要进行一些调整。没有%编码的字符,或HEAD是可能的等等。我不相信这会表现良好,因为正则表达式会变得昂贵。如果这让事情陷入困境,你可能需要编写自己的标记器。