2017-12-08 2 views
0

텍스트 필드가 filename 인 CloudSearch 도메인이 있습니다. 내 문제는 텍스트 쿼리가 (논리적으로) 필자가 생각하는 파일 이름과 (일부) 문서가 일치하지 않는다는 것입니다. 나는이 이름을 가진 문서가있는 경우 :CloudSearch가 파일 이름 텍스트 필드에서 부분 문자열 일치를 찾지 않는 이유는 무엇입니까?

  1. '자동차'
  2. '자동차 Movie.jpg'
  3. 'cars.pdf'
  4. '자동차 번호의 .JPG'

및 나는 'cars'라는 간단한 텍스트 쿼리를 수행하고 # 1, # 2 및 # 4 파일을 다시 가져 오지만 은 # 3이 아닙니다. 'cars *'(접두사를 사용하여 구조화 된 쿼리를 검색)하면 # 3과 일치 할 수 있습니다. 이것은 나에게 이해가되지 않는다. 특히 # 4 경기는 있지만 # 3 경기는 그렇지 않다.

답변

1

TL : DR 토큰 화 알고리즘이 마침표를 처리하는 방식 때문입니다.

텍스트 검색을 수행하면 리터럴 필드가 아닌 처리 된 데이터를 검색합니다. (어쩌면 그것은 명백해야했습니다,하지만 내가 전에 그것에 대해 생각하지 방법이었다.)

documentation 텍스트가 처리되는 방법의 개요를 제공합니다 인덱싱 동안

, 아마존 CloudSearch 프로세스를 텍스트 및 텍스트 배열 필드에 대해 필드에 구성된 분석 스키마에 따라 인덱스에 추가 할 용어를 결정합니다. 분석 옵션을 적용하기 전에 텍스트를 토큰 화하고 정규화합니다.

토큰 화하는 동안, 필드에 텍스트의 흐름이 정의 된 단어 휴식의 규칙을 사용하여 감지 경계에 별도의 토큰으로 분할됩니다 :

궁극적으로이 문제를 일으키는 과정의 부분은 토큰 화입니다 유니 코드 텍스트 분할 알고리즘

단어 분리 규칙에 따르면 공백 및 탭과 같이 공백으로 구분 된 문자열은 별도의 토큰으로 처리됩니다. 대부분의 경우 구두점을 삭제하고 공백으로 처리합니다. 예를 들어, 문자열은 하이픈 (-)과 at 기호 (@)로 나뉩니다. 그러나 공백이 오지 않는 기간은 토큰의 일부로 간주됩니다.

질문에서 설명한 것과 일치하는 이유는 파일 확장자가 단일 토큰으로 시작하는 파일에 포함되어 있기 때문입니다. 예제를 되돌아보고이 규칙에 따라 색인을 작성하면 # 1이 아닌 # 3의 # 1, # 2 및 # 4 문서가 'cars'검색에서 반환되는 이유가 있습니다.

# Text    Index 

1 'cars'    ['cars'] 
2 'Cars Movie.jpg' ['cars', 'movie.jpg'] 
3 'cars.pdf'.   ['cars.pdf'] 
4 'cars#.jpg'   ['cars', '.jpg'] 

가능한 해결책

그것은이 문제를 해결할 수있는 사용자 정의 분석 방식을 설정하는 것처럼 보일 수도 있지만,이 옵션 중 어느 것도 (중지 단어는 형태소 분석하지 동의어)를 사용하면 토큰 화 문제를 극복하는 데 도움. 원하는 동작을 얻는 유일한 방법은 업로드 전에 파일 이름을 토큰 화 (사용자 지정 알고리즘 사용) 한 다음 토큰을 텍스트 배열 필드에 저장하는 것입니다.여러 언어를 지원하는 사용자 정의 토큰 화 알고리즘을 고안하는 것은 큰 문제입니다.