调solr短语查询搜索

Tune solr phrase query search

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

单词是用 whitespacetokenizer 标记的。

我们在数据库中有几亿条记录,所有索引都是内存(我们使用 pcstat 进行了测试)。然而,查询仍然需要 5-15 秒。如果所有索引都在内存中,为什么要花这么长时间来提取结果?我该如何调整?

感谢任何帮助。

试试这个字段类型:

<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 分词器会将文本流准确地传递给过滤器。 PatternReplaceFilterFactory 将删除除字符和数字之外的所有内容。您可以根据需要进行配置。然后我们将流小写并生成 NGram。这是索引阶段。对于查询阶段,我们不执行 NGram,因为我们想要匹配精确的子字符串。

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

希望对您有所帮助。