Search 调优solr短语查询搜索

Search 调优solr短语查询搜索,search,solr,datastax,datastax-enterprise,Search,Solr,Datastax,Datastax Enterprise,我们正在尝试调整DSE搜索中的短语查询。 例如,如果列名X的值为“datastax”,则我们正在搜索与X完全匹配的值:“tast” 单词用whitespacetokenizer标记 数据库中有两亿条记录,所有索引都是内存(我们使用pcstat进行测试)。然而,查询仍然需要5-15秒。如果所有的索引都在内存中,为什么要花这么多时间来提取结果?我怎样才能调整这个 感谢您的帮助 请尝试以下字段类型: <fieldType name="custom_edge_ngram" class="solr

我们正在尝试调整DSE搜索中的短语查询。 例如,如果列名X的值为“datastax”,则我们正在搜索与X完全匹配的值:“tast”

单词用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>

这里,关键字TokenizerFactory tokenizeer将把文本流准确地传递给过滤器。PatternReplaceFilterFactory将删除除字符和数字以外的所有内容。您可以根据需要对此进行配置。然后我们将流小写并生成NGram。这是索引阶段。对于查询阶段,我们不做NGram,因为我们希望匹配精确的子字符串

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


希望这有帮助。

值“datastax”包含字符之间的空白。真实的数据也包含同样的内容吗?因为whitespacetokenizer会将其拆分为单独的字符。还有一件事,如果您搜索具有精确匹配的子字符串,则该子字符串可能具有可变长度。您还可以从solrconfig.xml中提供filterCache、queryCache和documentCache的详细信息吗?是的,您是对的,我正在搜索精确的子字符串,实际数据包含相同的模式,字符之间有空格。子字符串可以是任意长度。我们不想依赖缓存,因为我们的查询不会重复。我们希望我们的查询在第一次运行时表现良好。因为您的数据由WhitespaceTokenizer标记。查询和索引阶段将根据数据的性质将单词分解为单个字符。请检查:另一种方法可能是,您使用关键字标记器标记数据,因为它将相同的单词传递给过滤器。然后应用具有最大和最小克尺寸的边缘N克过滤器。你能告诉我更多的数据吗?是的,我明白。这就是我搜索精确子字符串的原因。如果我做错了,如何在我的情况下搜索精确的子字符串??我已经试过edgengram和ngram了。他们对我帮助不大。如何运行查询?X:“味道”或X:“味道”。从后面生成边图比前面有用吗?您使用的solr版本是什么?EdgeNGramFilterFactory在solr 4和solr 5中有不同的行为。感谢您的帮助。我将测试它。如何运行查询?X:“TAST”或X:“TAST”您可以查询任何内容。X:“味道”或X:“味道”。两者都会起作用。因为我们正在用空替换所有的空白。我在solr分析工具中进行了测试。尝试同样的方法。现在查询响应时间下降到1-2秒,但我们的索引大小几乎成倍增加,仅对于180G数据,我们就有120G的索引大小。我看到了你的另一篇文章,减少了索引的大小,但我们仍然有大量的索引和ngrams。