[
https://issues.apache.org/jira/browse/JENA-1093?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15068573#comment-15068573
]
ASF GitHub Bot commented on JENA-1093:
--------------------------------------
Github user ajs6f commented on a diff in the pull request:
https://github.com/apache/jena/pull/112#discussion_r48286947
--- Diff:
jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java ---
@@ -210,44 +212,36 @@ private QueryIterator variableSubject(Binding
binding, Node s, Node score, Node
return bmap;
} ;
- Iterator<Binding> bIter = Iter.map(r.iterator(), converter);
+ Iterator<Binding> bIter = Iter.map(results.iterator(), converter);
QueryIterator qIter = new QueryIterPlainWrapper(bIter, execCxt);
return qIter ;
}
+ private QueryIterator variableSubject(Binding binding, Node s, Node
score, Node literal, StrMatch match, ExecutionContext execCxt) {
+ List<TextHit> r = query(match.getProperty(),
match.getQueryString(), match.getLimit(), execCxt) ;
+ return resultsToQueryIterator(binding, s, score, literal, r,
execCxt);
+ }
+
private QueryIterator concreteSubject(Binding binding, Node s, Node
score, Node literal, StrMatch match, ExecutionContext execCxt) {
if (!s.isURI()) {
log.warn("Subject not a URI: " + s) ;
return IterLib.noResults(execCxt) ;
}
- Var scoreVar = (score==null) ? null : Var.alloc(score) ;
- Var literalVar = (literal==null) ? null : Var.alloc(literal) ;
String qs = match.getQueryString() ;
List<TextHit> x = query(match.getProperty(),
match.getQueryString(), -1, execCxt) ;
if ( x == null ) // null return value - empty result
return IterLib.noResults(execCxt) ;
+ List<TextHit> r = new LinkedList();
--- End diff --
You might or might not like this style more, but you could do this with a
filter:
```
List<TextHit> r = x.stream().filter(hit ->
hit.getNode().equals(s)).collect(Collectors.toList());
```
> jena-text query doesn't return all matching literals
> ----------------------------------------------------
>
> Key: JENA-1093
> URL: https://issues.apache.org/jira/browse/JENA-1093
> Project: Apache Jena
> Issue Type: Bug
> Components: Text
> Affects Versions: Jena 3.0.1
> Reporter: Osma Suominen
> Assignee: Osma Suominen
>
> After the optimizations in JENA-999, the text:query property function, when
> asked for stored literal values, no longer returns all matching literals.
> Instead, each subject is returned with a random TextHit (i.e. score+literal
> pair). This is a problem for me because I want to show to the user the most
> relevant reason why the search matched a particular SKOS concept (there may
> be many matching labels in various languages), or in some cases all the
> reasons.
> Also the returned match may not have the highest score, which could be a
> problem if one is interested in the score (I'm not).
> For example, with storeLiterals enabled and this data:
> {noformat}
> ex:subject rdfs:label "one reason", "another reason" .
> {noformat}
> this query
> {noformat}
> (?s ?score ?literal) text:query "reason" .
> {noformat}
> will return a single binding where ?literal is bound to either "one reason"
> or "another reason".
> Before JENA-999 it returned two bindings, one per literal.
> The culprit is the post-JENA-999 code in the TextQueryPF.exec method,
> particularly around this line that suppresses subsequent hits with the same
> subject URI:
> https://github.com/apache/jena/blob/master/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java#L188
> I already have a failing unit test that shows what I'd like to accomplish. I
> will try to make a PR at some point.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)