如何使用SOLR查询和精确字符串匹配查找文档

时间:2016-04-05 20:00:31

标签: datastax-enterprise

考虑一个简单的表:

CREATE TABLE transactions (
  enterprise_id uuid,
  transaction_id text,
  state text,
  PRIMARY KEY ((enterprise_id, transaction_id))

和Solr核心,默认使用自动生成的参数。

如果state可以是任意字符串,我如何构造一个Solr查询,该查询将在此表中找到state值与输入完全匹配的记录?

我尝试使用状态值a+b。这适用于q=state:"a+b",但会创建一个"短语查询":

"rawquerystring": "state:\"a+b\"",
"querystring": "state:\"a+b\"",
"parsedquery": "PhraseQuery(state:\"a b\")",
"parsedquery_toString": "state:\"a b\"",

因此,如果我使用q=state:"a(b"之类的查询,则会找到相同的记录,这会产生相同的措辞查询,并找到state a+b的记录。这对我来说是不可接受的,因为我需要完全匹配。

我浏览了https://cwiki.apache.org/confluence/display/solr/Other+Parsers,并尝试使用q={!term f=state}a+bq={!raw f=state}a+b,但都没有找到我的样本交易记录。

1 个答案:

答案 0 :(得分:1)

您可能会state生成TextField,其中应用标准标记化StandardTokenizer,然后在+上进行拆分,并且加号本身将被丢弃。您可以使用不同的标记化器(空格?)或仅使状态为StrField以进行完全匹配。

这适用于我state作为StrField

select * from transactions where solr_query='state:a+b';