Home

Lucene query with extact phase?

You are here

13 posts / 0 new
Last post
Lucene query with extact phase? [Solved]

I want to find with Lucene a node with a property. Exactly with this text. I'm using Alfresco 4.2 and the Alfresco Java API.

For example, imagine I have in Alfresco 2 nodes with my velocity_number property. One with the value "A B" and the other with the value "A B C".

On my webscript, I do this:

SearchParameters sp = new SearchParameters();
sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery(query);
ResultSet results = getSearchService().query(myQuery);

where myQuery is:

PATH: "//app:company_home/app:user_homes/cm:dir//." AND @own\:velocity_number:"A B"

This query returns me the 2 nodes, "A B" and "A B C". I don't want this, I only want "A B" node.

I thank that the solution was add an "=" character on the query, like this:

PATH: "//app:company_home/app:user_homes/cm:dir//." AND =@own\:velocity_number:"A B"

But don't find anything, the results is 0.

How is the query to find that I want?

If I do the same with the Node Browser of the Administration Console (with Lucene search) the same... 0 results. The character "=" only works for me if and find 1 result if I put the query on the Search combo on the Alfresco Explorer (advanced search).

Thanks!

indexing behaviour

How did you configure indexing behaviour in your model definition?
You should set  Tokenised="both" or  Tokenised="false" in your property index config, then "=" character query will work.like below

           <property name="own:velocity_number">
<type>d:content</type>
<mandatory>false</mandatory>
<index enabled="true">
<atomic>false</atomic>
<stored>false</stored>
<tokenised>both</tokenised>
</index>
</property>

The difference among "true","both","false" is :
If "true", the string value of the property is tokenized before indexing
if "false", it is indexed "as is" as a single string
if "both" then both forms above are in the index

So set it to "both" will be a good option.

If this post was helpful, please click Yes on the Post Rating

Yes, I have tokenised false.

Yes, I have tokenised false. This is my xml, similar than your propose:

<property name="own:velocity_number">
<type>d:text</type>
<mandatory>true</mandatory>
<index enabled="true">
<atomic>false</atomic>
<stored>true</stored>
<tokenised>false</tokenised>
</index>
</property>

But the = character not works. Don't find anything. :o(

For more info... If I do the same with the Node Browser of the Administration Console (with Lucene search) the same... 0 results. The character "=" only works for me if and find 1 result if I put the query on the Search combo on the Alfresco Explorer (advanced search).

fts-alfresco

Use character "=" you should use "fts-alfresco" language instead of lucene

If this post was helpful, please click Yes on the Post Rating

I thank use the webscript

I thank use the webscript using Lucene. Some properties are indexing. But I can use sp.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO)? What may be the consequence if I use FTS-ALFRESCO instead of Lucene? Is the same? The same performance efficiency?

And using Lucene, what's the equivalence with the "="?

fts-alfresco

You still can use fts-alfresco language in javascript api ,just call it like this

 var def =
{
query: "=@own\:velocity_number:\"A B\"",
language: "fts-alfresco"
};
var results = search.query(def);

As performance efficiency and consequence,I don't think it is a problem.In my opionion it is almost the same as lucene language.

If this post was helpful, please click Yes on the Post Rating

Thanks, with fts-alfresco

Thanks, with fts-alfresco works ok! It find my own property.

I only have a problem now with the query when I search by the alfresco uuid. I use this in the query:

   @sys\\:node-uuid:"6647a596-53e9-4676-adc4-a77d79487fdf";

When I use Lucene, it works ok, but when I change to fts-alfresco, don't works. What's the equivalence in fts to search a node by uuid?

Note: I use a java backed webscript, not javascript.

Thanks again!

ID

You can try to use ID as instead

 ID:workspace\://SpacesStore/ce55a850-b1c7-43c7-a600-b5c58a985429

If this post was helpful, please click Yes on the Post Rating

Only one question more about

Only one question more about indexing...

On my webscript, now I do this:

SearchParameters sp = new SearchParameters();
sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
sp.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO);
sp.setQuery(query);
ResultSet results = getSearchService().query(myQuery);

where myQuery is:

PATH: "//app:company_home/app:user_homes/cm:dir//." AND =@own\:velocity_number:"A B"

We use SOLR. And the "own" property that I search is not indexed. But the query find me the result.

How is possible? We can find results that aren't indexed on SOLR? This indexation only affects the speed/performance of the query? Or maybe it depends if I use FTS-ALFRESCO or LUCENE?

Thanks again!

fts-alfresco

fts-alfresco query language is special.It can search in database or in index depends on configuration. By default it will search in db first,so you can find what is not indexed.

If this post was helpful, please click Yes on the Post Rating

Oh,ok. For best performance

Oh,ok. I think that I see the problem... In our desalModel.xml, all the properties that we added have the <index enabled="true">. SOLR use this desalModel, because of this, we can find those properties. I understand that we should only put enabled true on the properties that we want to find when use the searchService.query().

I use Alfresco share 4.2 with SOLR, and use fts-alfresco language on the query because I use the "=" to find exact results.

I want to be sure that when me call to searchService.query() with LANGUAGE_FTS_ALFRESCO I use the index and not the database, for a better performance and speed. In conclusion... If I put index enabled=true on the A property, and I use searchService.query() with LANGUAGE_FTS_ALFRESCO to find this A property, I will be use the index to search the property and not the database?

And if you know, for curiosity... What is LANGUAGE_SOLR_FTS_ALFRESCO? I must use it if I have SOLR?

1.In model definition ,

1.In model definition , property is indexed by default ,so if you have not set enabled="false" explicitly ,it will be indexed.
2. Property definition has nothing do to with whether to search in index or search in db ,it is controlled by "solr.query.cmis.queryConsistency" parameter in alfresco-global.properties(if not exist,you can add it).If you set "solr.query.cmis.queryConsistency" to "EVENTUAL" ,it will search index first,but you run the risk of finding nothing.
3.Language SOLR_FTS_ALFRESCO has the same effect as language FTS_ALFRESCO in solr subystem.

If this post was helpful, please click Yes on the Post Rating

Oks! Perfect. Thank you very

Oks! Perfect. Thank you very much! :)

Topic locked