On Jan 13, 2014, at 2:10 PM, Andy Seaborne <[email protected]> wrote:

> On 12/01/14 17:34, Pierre-Andre Michel wrote:
>> Hello,
>> 
>> I am playing with the text:query property function.
>> The following query searches for var ?a where must meet 2 criteria, one 
>> related to predicate pred:cv-name, the other one to predicate 
>> pred:cv-synonym.
>> 
>> PREFIX pred: <http://nextprot.org/rdf/pred/>
>> PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
>> PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
>> PREFIX text: <http://jena.apache.org/text#>
>> SELECT *
>> where {
>> ?a text:query(pred:cv-name 'ubl' 5) .     <== first criterion
>> ?a text:query(pred:cv-synonym 'ubiquitin' 10) .   <== second criterion
>> ?a pred:cv-name ?n .
>> ?a pred:cv-synonym ?d .
>> }
>> 
>> When I trace the solr index calls, here is what I see:
>> 
>> 657968 [qtp1936269821-15] INFO  org.apache.solr.core.SolrCore  ? [rdf1] 
>> webapp=/solr path=/select params={q=cv_name:ubl&wt=javabin&version=2&rows=5} 
>> hits=172 status=0 QTime=1
>> 657972 [qtp1936269821-15] INFO  org.apache.solr.core.SolrCore  ? [rdf1] 
>> webapp=/solr path=/select 
>> params={q=cv_synonym:ubiquitin&wt=javabin&version=2&rows=10000} hits=256 
>> status=0 QTime=1
>> 657977 [qtp1936269821-15] INFO  org.apache.solr.core.SolrCore  ? [rdf1] 
>> webapp=/solr path=/select 
>> params={q=cv_synonym:ubiquitin&wt=javabin&version=2&rows=10000} hits=256 
>> status=0 QTime=1
>> 657982 [qtp1936269821-15] INFO  org.apache.solr.core.SolrCore  ? [rdf1] 
>> webapp=/solr path=/select 
>> params={q=cv_synonym:ubiquitin&wt=javabin&version=2&rows=10000} hits=256 
>> status=0 QTime=2
>> 657986 [qtp1936269821-15] INFO  org.apache.solr.core.SolrCore  ? [rdf1] 
>> webapp=/solr path=/select 
>> params={q=cv_synonym:ubiquitin&wt=javabin&version=2&rows=10000} hits=256 
>> status=0 QTime=1
>> 657991 [qtp1936269821-15] INFO  org.apache.solr.core.SolrCore  ? [rdf1] 
>> webapp=/solr path=/select 
>> params={q=cv_synonym:ubiquitin&wt=javabin&version=2&rows=10000} hits=256 
>> status=0 QTime=1
>> 
>> It seems that the search related to the second criterion is called once for 
>> each solution found for first criterion.
>> Is my interpretation correct ?
> 
> Yes - that's how this query will be executed.  ARQ normal mode of execution 
> is to start at some point (it does not move property functions around because 
> it has no idea which are selective or expensive).

OK...

> 
> > is there a workaround to compute mutiple text:query and do a single binding 
> > to var ?a ?
> 
> It may work (=> I haven't tried) to make the query name some of the fields.  
> The predicate, or default if not mentioned, is always added to the front of 
> the string but no other processing happens.
> 
> So if you write:
> 
> ?a text:query(pred:cv-name 'ubl AND field2:ubiquitin' 10) .
> 
> where field2 is the name of text:field name then you may be a single, 
> conjunctive query.

OK,  I will try what you suggest and tell you if it works or not.

> 
> 
> 
> Looking at the code, I can see no reason why the form of query could not be 
> changed to
> 
> ?a text:query( predicate1 "string1"  predicate2 "string2" ... limit)

Would be a real improvement

> 
> The types of the items can be used to distinguish the required processing.  
> It would only be conjunctions though.
> 
> So maybe better is not prepend the default field name and, without a given 
> predicate, you get a direct lucene query string.  The default is supposed to 
> be the default so it shoudl not need prepending.  This, of course, needs 
> testing
> 
> In case anyone want to try this, see TextQueryPF.objectToStruct around line 
> 230.


Thanks a lot, 
will feedback you during the week.

> 
>       Andy
> 
>> 
>> Thanky in advance for your answer,
>> Pierre-André
>> 
>> 
>> 
> 

Reply via email to