1

我的代码如下:

SolrQuery query = new SolrQuery();
    query.setQuery(q.trim());
try {
        QueryResponse res = getSolrServer().query(query);
        return res.getResults();
    } catch (SolrServerException sse) {
        log.error(sse);
    }

问题是,当我有超过 3 个字符的查询时,这会返回给我响应,例如,查询字符串“che”会响应结果,但是查询字符串“ch”会不返回任何响应。有没有办法可以覆盖 Solr Query 的 3 个字符的最小长度。

是导致问题的下面的 xml,如果是,我可以使用 java 以编程方式覆盖它吗

<analyzer type="index">
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="50" />
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

提前感谢您的帮助。

谢谢并恭祝安康,

瓦布哈夫

4

1 回答 1

3

NGramTokenizerFactory :-
默认行为。请注意,此标记器对整个字段进行操作。它不会破坏空白处的字段。结果,空格字符包含在编码中。

<analyzer>
  <tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>

在:“嘿,伙计”

输出:“h”、“e”、“y”、“”、“m”、“a”、“n”、“he”、“ey”、“y”、“m”、“ma”、“一个”

因此,使用您的配置:- minGramSize="3" maxGramSize="50" 小于 3 的项目将被过滤

对于两个字母词,因为您在索引中没有这些词,所以这些词永远无法搜索。您需要将 minGramSize 更改为 2 以使其可搜索。

于 2012-08-23T10:45:32.753 回答