You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/06/02 14:56:26 UTC

[04/13] jena git commit: Merge branch 'master' of https://github.com/apache/jena

Merge branch 'master' of https://github.com/apache/jena

Conflicts:
	jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
	jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
	jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/1b125934
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/1b125934
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/1b125934

Branch: refs/heads/master
Commit: 1b125934f585aba3e267f77a36cc03a6771aaaaa
Parents: 3f0c517 e789e9f
Author: Osma Suominen <os...@aalto.fi>
Authored: Fri May 29 15:42:27 2015 +0300
Committer: Osma Suominen <os...@aalto.fi>
Committed: Fri May 29 15:42:27 2015 +0300

----------------------------------------------------------------------
 .../org/apache/jena/riot/lang/ReaderTriX.java   |   3 +-
 .../jena/datatypes/xsd/impl/RDFLangString.java  |   2 +-
 .../apache/jena/graph/test/NodeCreateUtils.java |   4 +-
 jena-fuseki1/soh                                |   2 +-
 jena-fuseki2/apache-jena-fuseki/bin/s-delete    |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/s-get       |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/s-head      |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/s-post      |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/s-put       |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/s-query     |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/s-update    |  16 ++-
 .../apache-jena-fuseki/bin/s-update-form        |  16 ++-
 jena-fuseki2/apache-jena-fuseki/bin/soh         |  16 ++-
 .../jena/fuseki/servlets/SPARQL_Protocol.java   |   9 +-
 .../jena/fuseki/servlets/SPARQL_Query.java      |   9 +-
 .../jena/fuseki/servlets/SPARQL_Update.java     |   7 +-
 .../org/apache/jena/query/text/TextIndex.java   |   4 +-
 .../apache/jena/query/text/TextIndexLucene.java |  24 ++--
 .../query/text/TextIndexParseException.java     |  40 +++++++
 .../apache/jena/query/text/TextIndexSolr.java   | 119 +++++++++----------
 .../org/apache/jena/query/text/TextQueryPF.java |  74 +++++++-----
 21 files changed, 269 insertions(+), 172 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/1b125934/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
----------------------------------------------------------------------
diff --cc jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
index b57db5b,fe19b7b..a34e87a
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
@@@ -45,10 -45,12 +45,12 @@@ public interface TextIndex extends Clos
      //** score
      // Need to have more complex results.
      
-     /** Access the index - limit if -1 for as many as possible */ 
+     /** Access the index - limit if -1 for as many as possible 
+      * Throw QueryParseException for syntax errors in the query string.
+      */ 
 -    List<Node> query(String qs, int limit) ;
 +    List<TextHit> query(String qs, int limit) ;
      
 -    List<Node> query(String qs) ;
 +    List<TextHit> query(String qs) ;
  
      EntityDefinition getDocDef() ;
  }

http://git-wip-us.apache.org/repos/asf/jena/blob/1b125934/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/jena/blob/1b125934/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
----------------------------------------------------------------------
diff --cc jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
index 69848d8,718d4c7..b9bddaf
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
@@@ -183,38 -178,36 +178,35 @@@ public class TextIndexSolr implements T
      }
  
      @Override
 -    public List<Node> query(String qs) { return query(qs, 0) ; } 
 +    public List<TextHit> query(String qs) { return query(qs, 0) ; } 
  
      @Override
-     public List<TextHit> query(String qs, int limit)
-     {
 -    public List<Node> query(String qs, int limit) {
++    public List<TextHit> query(String qs, int limit) {
          SolrDocumentList solrResults = solrQuery(qs, limit) ;
 -        List<Node> results = new ArrayList<>() ;
 +        List<TextHit> results = new ArrayList<>() ;
  
-         for ( SolrDocument sd : solrResults )
-         {
+         for ( SolrDocument sd : solrResults ) {
 -            // ** score
 -            // 'score' field.
              String str = (String)sd.getFieldValue(docDef.getEntityField()) ;
-             //log.info("Entity: "+uriStr) ;
+             // log.info("Entity: "+uriStr) ;
              Node n = TextQueryFuncs.stringToNode(str) ;
 -            results.add(n) ;
 +            Float score = (Float) sd.getFirstValue("score");
 +            TextHit hit = new TextHit(n, score.floatValue());
 +            results.add(hit) ;
          }
  
          if ( limit > 0 && results.size() > limit )
              results = results.subList(0, limit) ;
  
-         return results ; 
+         return results ;
      }
  
-     private SolrDocumentList solrQuery(String qs, int limit)
-     {
+     private SolrDocumentList solrQuery(String qs, int limit) {
          SolrQuery sq = new SolrQuery(qs) ;
 -        // ** score
 -        // sq.setIncludeScore(true) ;
 +        sq.setIncludeScore(true) ;
          if ( limit > 0 )
              sq.setRows(limit) ;
-         else 
-             sq.setRows(MAX_N) ;   // The Solr default is 10.
+         else
+             sq.setRows(MAX_N) ; // The Solr default is 10.
          try {
              // Set default field.
              sq.add(CommonParams.DF, docDef.getPrimaryField()) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/1b125934/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
----------------------------------------------------------------------
diff --cc jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
index 4b37d95,5a48add..587f562
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
@@@ -52,12 -47,12 +52,10 @@@ import org.slf4j.LoggerFactory 
  public class TextQueryPF extends PropertyFunctionBase {
      private static Logger log = LoggerFactory.getLogger(TextQueryPF.class) ;
      /*
--     * ?uri :queryPF (property? "string" limit? score?) 
--     * (?uri ?score) not implemented
--     * Look for "//** score" in TextQueryPF, TextIndexLucene and TextIndexSolr
++     * (?uri ?score) :queryPF (property? "string" limit? score?) 
       */
  
-     private TextIndex     server        = null ;
+     private TextIndex     textIndex        = null ;
      private boolean       warningIssued = false ;
  
      public TextQueryPF() {}
@@@ -67,20 -62,16 +65,15 @@@
      @Override
      public void build(PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) {
          super.build(argSubject, predicate, argObject, execCxt) ;
--        //** score
--        // Subject possibilities become ?foo or (?foo ?score) 
          DatasetGraph dsg = execCxt.getDataset() ;
-         server = chooseTextIndex(dsg) ;
+         textIndex = chooseTextIndex(dsg) ;
 -        if (!argSubject.isNode())
 -            throw new QueryBuildException("Subject is not a single node: " + argSubject) ;
 +
 +        if (argSubject.isList() && argSubject.getArgListSize() != 2)
 +            throw new QueryBuildException("Subject has "+argSubject.getArgList().size()+" elements, not 2: "+argSubject);
  
          if (argObject.isList()) {
-             //extract of extra lang arg if present and if is usable.
-             //arg is removed from the list to avoid conflict with order and args length
-             langArg = extractArg("lang", argObject);
- 
              List<Node> list = argObject.getArgList() ;
+ 
              if (list.size() == 0)
                  throw new QueryBuildException("Zero-length argument list") ;
  
@@@ -181,17 -172,12 +183,13 @@@
          return qIter ;
      }
  
 -    private QueryIterator variableSubject(Binding binding, Node s, StrMatch match, ExecutionContext execCxt) {
 -        Var v = Var.alloc(s) ;
 -        List<Node> r = query(match.getQueryString(), match.getLimit(), execCxt) ;
 -        // Make distinct. Note interaction with limit is imperfect
 -        r = Iter.iter(r).distinct().toList() ;
 -        QueryIterator qIter = new QueryIterExtendByVar(binding, v, r.iterator(), execCxt) ;
 +    private QueryIterator variableSubject(Binding binding, Node s, Node score, StrMatch match, ExecutionContext execCxt) {
 +        Var sVar = Var.alloc(s) ;
 +        Var scoreVar = (score==null) ? null : Var.alloc(score) ;
 +        List<TextHit> r = query(match.getQueryString(), match.getLimit(), execCxt) ;
-         // Make distinct. Note interaction with limit is imperfect
- /*        r = Iter.iter(r).distinct().toList() ;
-         QueryIterator qIter = new QueryIterExtendByVar(binding, v, r.iterator(), execCxt) ;
- */
 +        Function<TextHit,Binding> converter = new TextHitConverter(binding, sVar, scoreVar);
 +        Iterator<Binding> bIter = new Map1Iterator<TextHit, Binding>(converter, r.iterator());
 +        QueryIterator qIter = new QueryIterPlainWrapper(bIter, execCxt);
          return qIter ;
      }
  
@@@ -201,27 -187,17 +199,27 @@@
              return IterLib.noResults(execCxt) ;
          }
  
 +        Var scoreVar = (score==null) ? null : Var.alloc(score) ;
          String qs = match.getQueryString() ;
 -        List<Node> x = query(match.getQueryString(), -1, execCxt) ;
 -        if ( x == null || ! x.contains(s) )
 +        List<TextHit> x = query(match.getQueryString(), -1, execCxt) ;
 +        
 +        if ( x == null ) // null return value - empty result
              return IterLib.noResults(execCxt) ;
 -        else
 -            return IterLib.result(binding, execCxt) ;
 +        
 +        for (TextHit hit : x ) {
 +            if (hit.getNode().equals(s)) {
 +                // found the node among the hits
 +                return IterLib.oneResult(binding, scoreVar, NodeFactoryExtra.floatToNode(hit.getScore()), execCxt) ;
 +            }
 +        }
 +
 +        // node was not among the hits - empty result
 +        return IterLib.noResults(execCxt) ;
      }
  
 -    private List<Node> query(String queryString, int limit, ExecutionContext execCxt) {
 +    private List<TextHit> query(String queryString, int limit, ExecutionContext execCxt) {
          // use the graph information in the text index if possible
-         if (server.getDocDef().getGraphField() != null
+         if (textIndex.getDocDef().getGraphField() != null
              && execCxt.getActiveGraph() instanceof GraphView) {
              GraphView activeGraph = (GraphView)execCxt.getActiveGraph() ;
              if (!Quad.isUnionGraph(activeGraph.getGraphName())) {