调整solr短语查询搜索

时间:2015-08-18 18:51:46

标签: search solr datastax datastax-enterprise

我们正在尝试在DSE搜索中调整我们的短语查询。 例如,如果我们有列名X,其值为" D A T A S T A X"我们正在寻找X的完全匹配:" T A S T"

使用whitespacetokenizer对单词进行标记。

我们在数据库中有几百万条记录,所有索引都是内存(我们使用pcstat测试)。但是查询仍需要5-15秒。如果所有索引都在内存中,为什么要花时间来提取结果呢?我该怎么调整呢?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

enter image description here

试试这个fieldType:

<fieldType name="custom_edge_ngram" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern="([^A-Za-z0-9])" replacement="" replace="all"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern="([^A-Za-z0-9])" replacement="" replace="all"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

KeywordTokenizerFactory tokenizeer将文本流精确传递给过滤器。 PatternReplaceFilterFactory将删除除字符和数字之外的所有字符。你可以随意配置它。然后我们小写流并生成NGram。这是针对索引阶段的。对于查询阶段,我们不执行NGram,因为我们想要匹配确切的子字符串。

我们将使用NGram而不是EdgeNGram,因为这将提供子字符串。 EdgeNGram始终包含从开始或结束。所以EdgeNGram在这种情况下没有帮助。

希望这有帮助。