I’ve started a belated mission to leverage payloads from Solr (SOLR-1485),
mainly from float payload decoding for weighting in scoring, but while digging
in I’m exploring all that payloads now have to offer including the
SpanPayloadCheckQuery. However, I’m not yet understanding how to use it
effectively, and what kinds of use cases it _really_ is and can be used for.
I think it isn’t working as it should, or at least I’m not understanding its
behavior. Here’s what I’m indexing, by way of the
DelimitedPayloadTokenFilter:
one|A two|B three|C
and making the following queries (these translate to SpanNearQuery with zero
slop and inOrder=true):
spanPayCheck(spanNear([words_dps:one, words_dps:two], 0, true), payloadRef:
A;)
*spanPayCheck(spanNear([words_dps:one, words_dps:two], 0, true), payloadRef:
A;B;)
spanPayCheck(spanNear([words_dps:one, words_dps:two], 0, true), payloadRef:
A;B;C;)
spanPayCheck(spanNear([words_dps:two, words_dps:three], 0, true), payloadRef:
A;)
*spanPayCheck(spanNear([words_dps:two, words_dps:three], 0, true),
payloadRef: A;B;)
spanPayCheck(spanNear([words_dps:two, words_dps:three], 0, true), payloadRef:
A;B;C;)
spanPayCheck(spanNear([words_dps:one, words_dps:two, words_dps:three], 0,
true), payloadRef: A;)
*spanPayCheck(spanNear([words_dps:one, words_dps:two, words_dps:three], 0,
true), payloadRef: A;B;)
spanPayCheck(spanNear([words_dps:one, words_dps:two, words_dps:three], 0,
true), payloadRef: A;B;C;)
Only the ones(*) with the payloads array set to “A” and “B” did it match, all
the others failed to match. Is that expected? I’m confused on how the
SpanPayloadCheckQuery uses this payloads array to further filter the matches on
the associated SpanQuery.
Could/would someone explain how this query works and why these matches are
working as they are? Thanks!
Here’s my test platform below:
——
bin/post -c payloads -type text/csv -out yes -d $'id,words_dps\n1,one|A two|B
three|C'
curl http://localhost:8983/solr/payloads/config/params -H
'Content-type:application/json' -d '{
"set" : {
"payload-checks": {
"wt":"json",
"indent":"on",
"debug":"query",
"echoParams":"all",
"facet":"on",
"facet.query": [
"{!payload_check key=one-two-A f=words_dps payloads=\"A\"}one two",
"{!payload_check key=one-two-AB f=words_dps payloads=\"A B\"}one two",
"{!payload_check key=one-two-ABC f=words_dps payloads=\"A B C\"}one
two",
"{!payload_check key=two-three-A f=words_dps payloads=\"A\"}two three",
"{!payload_check key=two-three-AB f=words_dps payloads=\"A B\"}two
three",
"{!payload_check key=two-three-ABC f=words_dps payloads=\"A B C\"}two
three",
"{!payload_check key=one-two-three-A f=words_dps payloads=\"A\"}one
two three",
"{!payload_check key=one-two-three-AB f=words_dps payloads=\"A B\"}one
two three",
"{!payload_check key=one-two-three-ABC f=words_dps payloads=\"A B
C\"}one two three"
]
}
}
}'
curl "http://localhost:8983/solr/payloads/select?q=*:*&useParams=payload-checks”
• facet_queries: {
• one-two-A: 0,
• one-two-AB: 1,
• one-two-ABC: 0,
• two-three-A: 0,
• two-three-AB: 1,
• two-three-ABC: 0,
• one-two-three-A: 0,
• one-two-three-AB: 1,
• one-two-three-ABC: 0
},
—
// not necessarily the latest code on SOLR-1485 - construction zone
public Query parse() throws SyntaxError {
String field = localParams.get(QueryParsing.F);
String value = localParams.get(QueryParsing.V);
String pStr = localParams.get("payloads","");
IdentityEncoder encoder = new IdentityEncoder();
List<BytesRef> payloads = new ArrayList<>();
String[] rawPayloads = pStr.split(" ");
for (String rawPayload : rawPayloads) {
payloads.add(encoder.encode(rawPayload.toCharArray()));
}
String[] terms = value.split(" ");
List<SpanQuery> stqs = new ArrayList<SpanQuery>();
for (String term : terms) {
stqs.add(new SpanTermQuery(new Term(field, term)));
}
SpanNearQuery snq = new SpanNearQuery(stqs.toArray(new SpanQuery[0]),
0, true);
Query spcq = new SpanPayloadCheckQuery(snq, payloads);
return spcq;
}
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]