2017-02-06 1 views
0

알려진 제품의 데이터베이스와 제품 목록의 제목을 일치 시키려고합니다. 나의 첫 번째 아이디어는 알려진 제품과 메타 데이터를 elasticsearch에 넣고 multi_match와 가장 일치하는 제품을 찾으려고했다. 현재 쿼리는 다음과 같습니다.mult_match의 특정 필드를 정확히 일치시키는 방법

{ 
    "query": { 
    "multi_match" : { 
     "query": "Men's small blue cotton pants SKU123", 
     "fields": ["sku^2","title","gender","color", "material","size"], 
     "type" : "cross_fields" 
    } 
    } 
} 

문제는 때때로 잘못된 색상의 제품을 반환합니다. 쿼리 문자열에있는 단어와 동일한 색상 필드를 가진 인덱스의 항목 만 채점하도록 위 쿼리를 수정할 수있는 방법이 있습니까? 나는 elasticsearch 5.1을 사용하고있다.

답변

1

elasticsearch가 특정 기준을 충족하는 항목에만 점수를 매기를 원하면 필터 컨텍스트에서 terms query을 사용해야합니다. terms query은 검색어를 분석하지 않으므로 직접 처리해야합니다. 간단한 것은 공백과 소문자로 토큰 화하고 다음과 같은 쿼리를 생성하는 것입니다.

{ 
    "query": { 
    "bool": { 
     "filter": { 
     "terms": { 
      "color": ["men's", "small", "blue", "cotton", "pants", "sku123"] 
     } 
     }, 
     "must": { 
     "multi_match": { 
      "query": "Men's small blue cotton pants SKU123", 
      "fields": [ 
      "sku^2", 
      "title", 
      "gender", 
      "material", 
      "size" 
      ], 
      "type": "cross_fields" 
     } 
     } 
    } 
    } 
} 
+0

빠른 응답을 가져 주셔서 감사합니다. 일부 테스트 후에이 코드는 색상이 "파랑"과 같은 단 하나의 단어 일 때 작동하지만 위의 쿼리는 "연한 파란색"또는 "진한 파란색"과 같은 다중 단어 색상이있는 색인의 항목과도 ​​일치하는 것처럼 보입니다. 색상 필드의 모든 단어가 키워드에 존재하는 항목 만 표면 처리 할 수 ​​있습니까? (순서가 틀릴 수도 있고 인접하지 않을 수도 있음) – rdelbel

+0

이것이 가능하다고 생각하지 않습니다. 모든 쿼리 토큰과 일치하는 쿼리를 가질 수 있지만 그 반대가 아닙니다. 더 중요하게도, 당신은 정말로 이것을 필요로합니까? 내 말은 내가 사용자라면 푸른 색을 요구할 때 밝은 파란색이 결과를 원할 것입니다. 유사한 질문이 http://stackoverflow.com/questions/32580295/elasticsearch-match-all-words-from-document-in-the-search-query 전에 질문되었습니다. 기본적으로이 쿼리를 사용하여 응용 프로그램 수준에서 원하는 작업을 수행 할 수 있습니다. – alkis

+0

물론 평소와 다른 것을 만들기 위해 스크립팅을 사용할 수는 있지만주의 할 것을 권장합니다. 상당한 오버 헤드가 발생할 수 있습니다. – alkis

관련 문제