考虑一个简单的表:
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+b
或q={!raw f=state}a+b
,但都没有找到我的样本交易记录。
答案 0 :(得分:1)
您可能会state
生成TextField
,其中应用标准标记化StandardTokenizer,然后在+
上进行拆分,并且加号本身将被丢弃。您可以使用不同的标记化器(空格?)或仅使状态为StrField
以进行完全匹配。
这适用于我state
作为StrField
:
select * from transactions where solr_query='state:a+b';