当前位置: 首页 > 知识库问答 >
问题:

Solr自定义筛选器标记流问题

鲁涵意
2023-03-14
<tokenizer class="solr.WhitespaceTokenizerFactory"/>

    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.TrimFilterFactory" pattern="([^a-z])" replacement="" replace="all" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="custom_stop_words.txt"/>
    <filter class="intuit.ripple.solr.ConcatFilterFactory" />
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="3" />
1. Input value: "foo Bar Baz qux"
2. WhitespaceTokenizerFactory: "foo", "Bar", "Baz", "qux"
3. LowerCaseFilterFactory: "foo", "bar", "baz", "qux"
4. TrimFilterFactory, TrimFilterFactory and StopFilterFactory have nothing to do in this case.
5. ConcatFilterFactory: "foobarbazqux". It should concatenate the tokens.
6. NGramFilterFactory: This will generate the token.
@Override
public boolean incrementToken()  throws IOException  {

    StringBuilder builder = new StringBuilder();

    while (input.incrementToken()) {
        int len = charTermAtt.length();
        char buffer[] = charTermAtt.buffer();
        builder.append(buffer, 0, len);
        System.out.println("Tokens: " + new String(buffer, 0, len));
        clearAttributes();
        charTermAtt.setEmpty();
    }
    System.out.println("Concat tokens: " + builder.toString());

    charTermAtt.copyBuffer(builder.toString().toCharArray(), 0, builder.length());
    charTermAtt.setLength(builder.length());
    posIncAtt.setPositionIncrement(1);
    setOffsetAttr.setOffset(0, builder.length());

    input.end();
    input.close();
    return false;
}

共有1个答案

许出野
2023-03-14

我想你想做一些其他的事情,而不是你实现的:D

在incrementToken方法中所做的只是遍历整个输入(在本例中是StopFilter的输出)。在每次调用增量令牌时,您只需从输入中获取一个(如果需要的话,还需要更多)令牌,然后生成一个令牌输出。

所以我想您不想在这里使用“while”循环,并且在每次中间调用“clearattributes()”。

Tokens: foo
Tokens: bar
Concat tokens: foo bar
 类似资料:
  • 我需要为solr分析器阶段编写一个自定义过滤器。这个想法是首先用空格标记输入的业务名称,然后应用一组过滤器来进行小写、模式替换和删除停止词。在这些筛选之后,我希望将所有令牌合并(串联)到一个令牌中,然后应用NGramFilterFactory从令牌生成n个Grams。 我想要组合所有的令牌(最初从业务名称生成)的原因是,我不会错过solr中索引的令牌(在NGramFilter中长度小于N),而且用

  • 存储在Django模型中的元素如下 示例数据如下: . 结果:找到对象- 结果:找到对象- 结果:找到对象- 结果:未找到对象 如何使用过滤器和正则表达式进行这些查询?

  • 我有一个扩展类的类,它看起来像: 问题是,我可以向添加自定义吗?我浏览了和中可用的所有方法,但没有找到任何方法。但是在模式下,我发现在中有的列表。如何在此添加自定义?

  • 我创建了一个自定义筛选器,用于获取令牌,然后用与令牌相关的角色填充身份验证对象 然后,我将该过滤器添加到springsecuritycontext中,如下所示: 应用程序已经存在,我只是尝试添加Spring Security层。Spring Security版本为4.2.3。在尝试实现此功能的几天后,不会加载,因此不会筛选任何请求。请帮帮忙。

  • 下面是过滤器的外观。 对于WebSecurityConfigurerAdapter#configure(webSecurityWeb)web.忽略()中包含的路径,我希望该筛选器不会像Spring Security筛选器链的其余部分一样激发。 下面是它的样子 我希望在调用Spring Security链的其余部分时调用这个过滤器,并对web.igneration()中的路径忽略这个过滤器,就像Sp

  • 我正在尝试将基于Spring MVC xml的项目配置重构为基于Spring Boot java的配置。同时按如下方式设置shiro配置: