2014-01-13 2 views
1

대소 문자를 구분하지 않는 Cypher 쿼리를 작성하는 것은 매우 쉽습니다. 나는 이제 Accent Insensitive 쿼리를 작성하는 쉬운 방법이 있는지 알아 내려고하고있다.Accent Neo4J에서의 insensitive 쿼리

MATCH n:City WHERE n.Name =~ '(?a)Montreal' RETURN n

누군가가이 문제를 해결하기위한 방안을 발견했다입니다 : 나는 유사한 쿼리 생각하고? FullText Lucene Index과 함께 Custom Analyzer을 만들어야합니까?

답변

1

Lucene Fulltext 인덱스는 자동으로 대/소문자를 구분하지 않습니다. 따라서 맞춤 분석기가 필요하지 않습니다.

또 다른 옵션은 그래프에 정보의 소문자 버전을 저장하고 조회 또는 검색에이를 사용하는 것입니다. 나는 그것이 약한 해결 방법이라는 것을 알고있다.

+0

감사합니다. 내가 'Custom analyzer'를 사용한다고 말하면, 'Accent Insensitive'연구를 수행해야하기 때문입니다. 불어로, 우리는 엑센트 (eecai ...)로 변환해야하는 많은 악센트 (éèçàî 등)를 가지고 있습니다. –

+0

필자는 검색해야하는 모든 필드에 대해 중복 필드를 사용하려고 생각하고 있었지만 MySQL에서 할 수있는 것과 비교하여 많은 수의 노드를 검색하려고 할 때 Neo4J가 매우 느린 것을 발견했습니다. Lucene Index로 성능을 향상시킬 수 있는지 테스트하고 싶습니다. –

1

Neo4j 2.0의 스키마 색인은 현재 분석기를 구성 할 수 없습니다. 이것은 Neo4j의 후속 버전에서 추가 될 수 있습니다. 그 동안 레거시 인덱스 (분석기를 사용자 정의 할 수있는 레거시 인덱스)를 사용하거나 애플리케이션 측에서 문자열을 정규화 할 수 있습니다.

+0

감사합니다. 애플리케이션 측면에서 문자열을 정규화한다고하면 그래프의 모든 내용이 악센트가 없거나 모든 문자열 (표시 문자열 및 검색 가능한 악센트가없는 문자열)에 대해 그래프에 두 개의 문자열을 유지해야합니다. 끈? –

+0

문자열의 두 버전을 다른 속성에 저장하는 것으로 추측합니다 (예 : name, normalized_name이 최선의 방법 일 수 있습니다. http://api.neo4j.org/2.0.0/org/neo4j/graphdb/event/TransactionEventHandler.html을 구현하고 등록하여 자동화 할 수도 있습니다. –

+0

그게 내가 힘든거야. Neo4j와 일반적인 MySQL 데이터베이스를 비교하려고합니다. MySQL에서이 모든 것은 자동화 된 것입니다. 커스텀 애널라이저와 함께 레거시 인덱스와 함께 몇 가지 시도해 보도록하겠습니다. 감사. –