0

在 SOLR 中,我想定义一个按字母顺序获取结果的字段。所以,如果我搜索“S”,它只会给我带来以 S 开头的结果(我在一个字段上搜索)。
这就是我试图定义它的方式,但是,它也给我带来了不以“S”开头的结果

<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="solr.LowerCaseTokenizerFactory"/>
         <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="5" side="front"/>
       </analyzer>
       <analyzer type="query">
          <tokenizer class="solr.LowerCaseTokenizerFactory"/>
       </analyzer>
</fieldType>

我使用的查询:

http://MySERVER/solr/content/select/?q=alpha_title:s&start=0&rows=15

在我看来,我应该使用 ngrams 标记器而不是过滤器。将测试和更新。

4

2 回答 2

0

Itay Moav 让我把我的评论作为答案,所以这里是:

您应该进行别名搜索,如下所示:

http://MySERVER/solr/content/select/?q=alpha_title:s*&start=0&rows=15

用星号说它必须以s开头。

于 2012-10-08T20:43:27.187 回答
0

正如我所想,我需要在分析器中使用 ngram 标记器而不是 ngram 过滤器。所以,这是工作模式:

<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="org.apache.solr.analysis.EdgeNGramTokenizerFactory" minGramSize="1" maxGramSize="5"/> 
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>
</fieldType>
于 2012-09-11T14:18:59.067 回答