Elasticsearch 2.x에서 내 analzyer에서 "소문자"필터를 사용하면서 (대문자 소문자를 구별하지 않도록 사용) 일반 영어 단어 "can"에서 머리 글자 어 "CAN"을 어떻게 구별 할 수 있습니까?탄성 검색 - 소문자 필터를 사용하는 동안 대문자 약자를 어떻게 보존 할 수 있습니까?
내가 사용하고 사용자 정의 분석은 다음과 같습니다 인덱스 때
"analyzer": {
"tight": {
"type": "custom",
"tokenizer": "standard",
"stopwords": "_english_",
"filter": ["lowercase", "asciifolding"]
}
}
, 대문자 글자가 "CAN은"내 분석기를 칠 때, 그것은 영어 단어 "수"가된다. 그런 다음 "CAN"을 검색하면 영어 단어 "can"이있는 모든 문서를 가져옵니다. 나는 단지 대문자 "CAN"을 포함하는 문서 만 원한다. 유사한 패턴으로 떨어지는 다른 두문자어가있을 수 있습니다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
첫 번째 문제점은 대소 문자를 구분하지 않고 일치 검색을 수행하기 위해 소문자 필터로 필드를 검색해야한다는 것입니다. 즉, 약어 "CAN"이 항상 첫 번째 기준과 일치한다는 것을 의미합니다 . 내가 작업하고있는 솔루션은 "CAN"이라는 약어를 "ccaann"으로 대체하는 char_filter를 추가 한 다음 내 머리 글자 어를 대문자로 대체하는 내 머리 글자 대체 목록을 가지고 있습니다. – Redtopia
충분합니다. 해당 경로를 선택하는 경우 [동의어 토큰 필터] (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html)를 대신 사용하는 것이 좋습니다. 클라이언트 코드를 전혀 수정하지 않아도됩니다. 동의어 파일을 큐레이팅하기 만하면됩니다. – Val
그것은 재미있는 생각입니다. 따라서 CAN이 "ccaann"으로 색인이 생성되면 내 동의어는 "CAN, ccaann"이 맞습니까? – Redtopia