02-27-2024 05:15 PM
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 }
<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.
02-28-2024 03:32 AM
What is the CMIS query used?
This works as expected for me:
select * from colClient:test where colClient:caseNumber='case number postman'
02-28-2024 08:52 AM
Hi Angel Borroy, I appreciate your answer.
Yes this query cmis works, but it returns documents that should not be returned:
For example: If I have 2 documents where the attribut 'caseNumber' has:
case number postman
and another
case number postman test
The query return these 2 documents.
If I search just the word 'case', these 2 documents are returned also.
For me, the 'exact term search' does not work correctly.
Could you give help me with some ideas, please?
02-28-2024 11:09 AM
That is not true in my local deployment:
Double-check you're applying properly the exact term search configuration:
https://docs.alfresco.com/search-enterprise/latest/config/#exact-term-search
This is my local Docker Compose, exactTermSearch.properties includes exactly what is described in Alfresco Docs.
services: alfresco: image: quay.io/alfresco/alfresco-content-repository:${ALFRESCO_TAG} environment: JAVA_TOOL_OPTIONS: " -Dencryption.keystore.type=JCEKS -Dencryption.cipherAlgorithm=DESede/CBC/PKCS5Padding -Dencryption.keyAlgorithm=DESede -Dencryption.keystore.location=/usr/local/tomcat/shared/classes/alfresco/extension/keystore/keystore -Dmetadata-keystore.password=mp6yc0UD9e -Dmetadata-keystore.aliases=metadata -Dmetadata-keystore.metadata.password=oKIWzVdEdA -Dmetadata-keystore.metadata.algorithm=DESede " JAVA_OPTS: " -Ddb.driver=org.postgresql.Driver -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.url=jdbc:postgresql://postgres:5432/alfresco -Delasticsearch.createIndexIfNotExists=true -Dindex.subsystem.name=elasticsearch -Delasticsearch.host=elasticsearch -Delasticsearch.indexName=${ELASTICSEARCH_INDEX_NAME} -Dshare.host=127.0.0.1 -Dshare.port=8080 -Dalfresco.host=localhost -Dalfresco.port=8080 -Daos.baseUrlOverwrite=http://localhost:8080/alfresco/aos -Dmessaging.broker.url=\"failover:(nio://activemq:61616)?timeout=3000&jms.useCompression=true\" -Ddeployment.method=DOCKER_COMPOSE -Dtransform.service.enabled=true -Dtransform.service.url=http://transform-router:8095 -Dsfs.url=http://shared-file-store:8099/ -DlocalTransform.core-aio.url=http://transform-core-aio:8090/ -Dcsrf.filter.enabled=false -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 " volumes: - ./exactTermSearch.properties:/usr/local/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/search/elasticsearch/config/exactTermSearch.properties transform-router: image: quay.io/alfresco/alfresco-transform-router:${TRANSFORM_ROUTER_TAG} environment: JAVA_OPTS: " -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80" ACTIVEMQ_URL: "nio://activemq:61616" CORE_AIO_URL: "http://transform-core-aio:8090" FILE_STORE_URL: "http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file" ports: - "8095:8095" links: - activemq transform-core-aio: image: alfresco/alfresco-transform-core-aio:${TRANSFORM_ENGINE_TAG} environment: JAVA_OPTS: " -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80" ACTIVEMQ_URL: "nio://activemq:61616" FILE_STORE_URL: "http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file" ports: - "8090:8090" links: - activemq shared-file-store: image: quay.io/alfresco/alfresco-shared-file-store:${SHARED_FILE_STORE_TAG} environment: JAVA_OPTS: " -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80" scheduler.content.age.millis: 86400000 scheduler.cleanup.interval: 86400000 ports: - "8099:8099" volumes: - shared-file-store-volume:/tmp/Alfresco/sfs share: image: quay.io/alfresco/alfresco-share:${SHARE_TAG} mem_limit: 1g environment: REPO_HOST: "alfresco" REPO_PORT: "8080" JAVA_OPTS: " -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 -Dalfresco.host=localhost -Dalfresco.port=8080 -Dalfresco.context=alfresco -Dalfresco.protocol=http " postgres: image: postgres:${POSTGRES_TAG} environment: - POSTGRES_PASSWORD=alfresco - POSTGRES_USER=alfresco - POSTGRES_DB=alfresco command: postgres -c max_connections=300 -c log_min_messages=LOG ports: - "5432:5432" elasticsearch: image: elasticsearch:${ELASTICSEARCH_TAG} platform: linux/amd64 environment: - xpack.security.enabled=false - discovery.type=single-node ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 cap_add: - IPC_LOCK ports: - 9200:9200 - 9300:9300 kibana: image: kibana:${KIBANA_TAG} platform: linux/amd64 environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 ports: - 5601:5601 depends_on: - elasticsearch live-indexing: image: quay.io/alfresco/alfresco-elasticsearch-live-indexing:${LIVE_INDEXING_TAG} depends_on: - elasticsearch - alfresco environment: SPRING_ELASTICSEARCH_REST_URIS: http://elasticsearch:9200 SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 ALFRESCO_ACCEPTEDCONTENTMEDIATYPESCACHE_BASEURL: http://transform-core-aio:8090/transform/config ALFRESCO_SHAREDFILESTORE_BASEURL: http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file/ # zeppelin activemq: image: alfresco/alfresco-activemq:${ACTIVEMQ_TAG} ports: - "8161:8161" # Web Console - "5672:5672" # AMQP - "61616:61616" # OpenWire - "61613:61613" # STOMP # digital-workspace # control-center proxy: image: alfresco/alfresco-acs-nginx:${ACS_NGINX_TAG} depends_on: - alfresco environment: - DISABLE_SYNCSERVICE=true - DISABLE_ADW=true - DISABLE_CONTROL_CENTER=true - USE_SSL=false ports: - "8080:8080" links: - alfresco - share # sync-service volumes: shared-file-store-volume: driver_opts: type: tmpfs device: tmpfs
.env file describes the versions used:
# Docker Image versions ALFRESCO_TAG=23.1.0 SEARCH_TAG=2.0.8.2 SHARE_TAG=23.1.0 POSTGRES_TAG=14.4 TRANSFORM_ROUTER_TAG=4.0.0 TRANSFORM_ENGINE_TAG=5.0.0 SHARED_FILE_STORE_TAG=4.0.0 ACTIVEMQ_TAG=5.17.1-jre11-rockylinux8 ADW_TAG=4.2.0 CONTROL_CENTER_TAG=8.2.0 ACS_NGINX_TAG=3.4.2 SYNC_SERVICE_TAG=4.0.0 ELASTICSEARCH_TAG=7.10.1 KIBANA_TAG=7.10.1 OPENSEARCH_TAG=1.3.13 OPENSEARCH_DASHBOARDS_TAG=1.3.13 LIVE_INDEXING_TAG=4.0.0 ELASTICSEARCH_INDEX_NAME=alfresco
02-28-2024 11:55 AM
Hello,
My exact term search configuration is correct. I'm capable of visualize every property in exactTermSearch.properties file in mode debug.
By the way, for your property 'caseNumber' it's configured how?
<tokenised>false</tokenised>
or
<tokenised>both</tokenised>
Do you placed it too in the exactTermSearch.properties file like
alfresco.cross.locale.property.N={http://your-domain/model/1.0}caseNumber
?
Thank you in advance
03-04-2024 01:49 PM
Hi,
Could you answer my question, please? I'd like to check if our configuration is the same.
Thanks
03-06-2024 03:14 PM
Hi Angelborrow,
I have the same exact problem.
Lets say I have 2 documents. one with sc:test = test and one with sc:test = test whitespace
when I execute this query : select * from sc:doc where sc:test='test whitespace' The only result I got is the wrong document (the one with sc:test = test not the one with sc:test = test whitespace)
It looks like exact term Search doesn't work when there is a whitespace. The only way I got the right result is when I used db-cmis instead of cmis-strict.
03-06-2024 03:23 PM
Here an example :
But I shouldn't be getting this document because I searched : 'test whitespace'.
Explore our Alfresco products with the links below. Use labels to filter content by product module.