My CMIS search with '=' does not work.
Query: SELECT * FROM colClient:document where colClient:caseNumber = 'case number postman'
Model:
<property name="colClient:caseNumber">
<type>d:text</type>
<mandatory>false</mandatory>
<index enabled="true">
<atomic>true</atomic>
<stored>false</stored>
<tokenised>false</tokenised>
</index>
</property>
This property it was added in the file 'exactTermSearch.properties':
alfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}text
alfresco.cross.locale.property.9={http://domain/collectif/client/model/1.0}caseNumber
The mapping created in elasticsearch:
"colClient%3AcaseNumber": {
"type": "keyword",
"meta": {
"DecodedQualifiedName": "colClient:caseNumber"
}
},
"colClient%3AcaseNumber_untokenized": {
"type": "alias",
"path": "colClient%3AcaseNumber"
}API:
org.alfresco.repo.search.impl.elasticsearch.ElasticsearchSearchService
Method: query(SearchParameters searchParameters)
Variable searchParameters populated:
SearchParameters searchParameters = new SearchParameters();
searchParameters.addStore(getStoreRef());
searchParameters.setMaxItems(nbrElementParPage);
searchParameters.setSkipCount(pageForSearch * nbrElementParPage);
searchParameters.setQuery(query);
searchParameters.setLanguage(org.alfresco.service.cmr.search.SearchService.LANGUAGE_CMIS_STRICT);
searchParameters.setDefaultFTSFieldConnective(SearchParameters.Operator.AND);
searchParameters.setDefaultFTSOperator(SearchParameters.Operator.AND);
searchParameters.setDefaultOperator(SearchParameters.Operator.AND);
JSON generated:
{
"from": 0,
"size": 500,
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"query_string": {
"query": "TYPE:colClient\\:document",
"fields": [],
"type": "best_fields",
"default_operator": "or",
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1.0
}
},
{
"query_string": {
"query": "+colClient%3AcaseNumber:case +colClient%3AcaseNumber:number +colClient%3AcaseNumber:postman",
"fields": [],
"type": "best_fields",
"default_operator": "or",
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1.0
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
}
],
"filter": [
{
"match_all": {
"boost": 1.0
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
},
"track_scores": true,
"track_total_hits": 10000
}
With that, I got any documents returned, but exist at least one document with the property 'caseNumber' with a value = 'case number postman'
The only way that works is when I change
<tokenised>false</tokenised>
to<tokenised>both</tokenised>
But, in this case, if I search for colClient:caseNumber = 'case' or colClient:caseNumber = 'number', I receive at least one document as a result, but this is not correct, because I try to search documents with exactly this value and not like or contains.
Any one could help me?