【发布时间】:2015-11-11 20:45:59
【问题描述】:
我们正在尝试调整 DSE 搜索中的短语查询。 例如,如果我们的列名 X 的值为“D A T A S T A X”,我们正在搜索 X 的完全匹配:“T A S T”
使用 whitespacetokenizer 对单词进行标记。
我们在数据库中有几亿条记录,所有索引都是内存(我们使用 pcstat 进行了测试)。然而,查询仍然需要 5-15 秒。如果所有索引都在内存中,为什么要花这么多时间来提取结果?我该如何调整这个?
感谢任何帮助。
【问题讨论】:
-
值“D A T A S T A X”包含字符之间的空白。真实的数据也包含相同的吗?因为 whitespacetokenizer 会将其拆分为单独的字符。还有一件事,您是否搜索完全匹配的子字符串,这个子字符串可能是可变长度的。您能否从您的 solrconfig.xml 中提供 filterCache、queryCache 和 documentCache 的详细信息?
-
是的,你是对的,我正在搜索确切的子字符串,真实数据包含相同的模式,字符之间有空格。子字符串可以是任意长度。
, 。我们不想依赖缓存,因为我们的查询不会重复。我们希望我们的查询在第一次运行时表现良好。 -
因为您的数据由 WhitespaceTokenizer 标记。鉴于数据的性质,查询和索引阶段会将单词分解为单个字符。请检查:wiki.apache.org/solr/…
-
其他方式可能是,您使用关键字标记器对数据进行标记,因为它会将相同的单词传递给过滤器。然后应用具有最大和最小克大小的 Edge N-Gram 过滤器。您能详细介绍一下数据吗?
-
是的,我明白了。这就是我搜索确切子字符串的原因。如果做错了如何在我的情况下搜索确切的子字符串?我已经尝试过 edgengram 和 ngram。他们对我帮助不大。
标签: search solr datastax datastax-enterprise