그래서 나는 형식의 값을 저장하는 필드가 있습니다 ... number/year
을 2천14분의 23과 같이, 2,014분의 24, 2천15분의 12 등 elasticsearch의 동일한 필드에서 정확한 값과 일치하는 쿼리를 만드는 방법은 무엇입니까?
not_analyzed
하나로 매핑되는 경우, 내가 정확한 구조 (정확히는 1/2014, 15/2014, ...와 같은 값)를 검색하면 용어 필터로 정확한 값 검색을 할 수 있습니다.
sql equals(=)
처럼 작동합니다.
{
"query": {
"filtered": {
"filter": {
"term": {
"processNumber": "11/2014"
}
}
}
}
}
그래서 11 /, 또는/2014와 (과) 다른 검색은 히트를 반환하지 않습니다. 이건 괜찮아.
필드를 not_analyzed
으로 정의하면 match_phrase
쿼리로 sql LIKE
유형 검색을 할 수 없습니다.
{
"query": {
"match_phrase": {
"processNumber": "11/201"
}
}
}
이 경우 11,11 /,/2014 또는 2014를 검색하면 조회수가 반환되지만 반환되지는 않습니다. 이 쿼리는 필드가 not_analyzed
으로 매핑되지 않은 경우 작동합니다. 그래서 하나 또는 다른 하나를 사용해야하는 것, 문제는 필드가 다른 쿼리에 대한 두 옵션을 모두 지원해야한다는 것입니다. 여기에 뭔가 빠졌습니까?
감사합니다. 저는 현재 elasticsearch와의 스프링 통합을 사용하고 있는데, 현재 필드가 어떻게 매핑되어 있는지 알려줍니다 : @Field (type = String, index = FieldIndex.not_analyzed) public String processNumber; 여기에 fields 속성을 설정하는 방법이 있는지 모르겠습니다. – Maxrunner
이 좋아 내가이 일을 찾은 것 같아 : = @MultiField ( mainField = @ 필드 (유형 문자열, 인덱스 = FieldIndex.not_analyzed), otherFields = @NestedField (dotSuffix는 = "분석", 유형 = 문자열 색인 = FieldIndex.analyzed) ) 하지만 세 가지 일치 검색어의 차이점을 알려주시겠습니까? – Maxrunner
@Maxrunner가 대답을 편집하여 쿼리에 대한 간략한 설명을 제공합니다. – keety