2014-07-14 3 views
0

나는elasticsearch 매핑을 사용하여 복수형과 단수형을 모두 찾는 방법은 무엇입니까?

속성에 대한 저장된 값이 shoes하고 필드에 대한 분석은 눈덩이이며,이 모든 것이 내가 shoes 검색하고 때를 찾을 수없는 ES에도 불구하고 버전 1.2.1을 elasticsearch 사용하고 있습니다. 이것은 내 매핑

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "match_all": {} 
     }, 
     "filter": { 
     "or": [ 
      { 
      "term": { 
       "category": "shoes" 
      } 
      }, 
      { 
      "term": { 
       "sub_category1": "shoes" 
      } 
      }, 
      { 
      "term": { 
       "sub_category2": "shoes" 
      } 
      }, 
      { 
      "term": { 
       "brand": "shoes" 
      } 
      }, 
      { 
      "term": { 
       "shop": "shoes" 
      } 
      } 
     ] 
     } 
    } 
    }, 
    "aggregations": { 
    "category": { 
     "terms": { 
     "field": "category" 
     } 
    }, 
    "sub_category1": { 
     "terms": { 
     "field": "sub_category1" 
     }, 
     "aggregations": { 
     "discount": { 
      "avg": { 
      "field": "discount_percentage" 
      } 
     } 
     } 
    } 
    } 
} 

: 나는 shoe를 검색 할 때 문서를 발견 ...

이 내 쿼리입니다

"mappings": { 
     "item": { 
     "properties": { 
      "brand": { 
      "type": "string", 
      "analyzer": "snowball" 
      }, 
      "category": { 
      "type": "string", 
      "analyzer": "snowball" 
      }, 
      "color": { 
      "type": "string" 
      }, 
      "created_at": { 
      "type": "date", 
      "format": "dateOptionalTime" 
      }, 
      "discount_percentage": { 
      "type": "long" 
      }, 
      "domain_name": { 
      "type": "string" 
      }, 
      "id": { 
      "type": "long" 
      }, 
      "image": { 
      "type": "string" 
      }, 
      "item_name": { 
      "type": "string" 
      }, 
      "link": { 
      "type": "string" 
      }, 
      "need_indexing": { 
      "type": "boolean" 
      }, 
      "price": { 
      "type": "string" 
      }, 
      "price_range": { 
      "type": "string" 
      }, 
      "product_key": { 
      "type": "string" 
      }, 
      "raw_size": { 
      "type": "string" 
      }, 
      "regular_price": { 
      "type": "string" 
      }, 
      "sale_price": { 
      "type": "string" 
      }, 
      "scrape_run": { 
      "type": "string" 
      }, 
      "shop": { 
      "type": "string", 
      "analyzer": "snowball" 
      }, 
      "size": { 
      "type": "string" 
      }, 
      "source_url": { 
      "type": "string" 
      }, 
      "sub_category1": { 
      "type": "string", 
      "analyzer": "snowball" 
      }, 
      "sub_category2": { 
      "type": "string", 
      "analyzer": "snowball" 
      }, 
      "updated_at": { 
      "type": "date", 
      "format": "dateOptionalTime" 
      } 
     } 
     } 
    } 
    } 

답변

0

문제는 당신이 색인 눈덩이를 사용하는 "신발"에서 "신발"까지 줄기는하지만, 분석되지 않은 용어를 찾는 용어 필터가있는 match_all 검색어를 실행합니다.

용어 필터

용어 (분석되지 않음)가있는 필드가있는 문서를 필터링합니다. 용어 쿼리와 유사하지만 필터로 작동한다는 점이 다릅니다. 은 필터를 허용하는 검색어에 포함될 수 있습니다.

그래서 "신발"이 일치하여 색인의 원시 용어를 검색합니다.

일반적으로 말하자면 복잡한 인덱스 및 쿼리 시간 분석을 설정할 때 특정 항목이 일치하도록하려는 경우 - 예를 들어 스노우 볼을 사용하여 길을 잃어 버릴 경우 수색.

쿼리 필터

랩 어떤 쿼리를 필터로 사용되는 :

상황을 위해 나는 용어 ​​필터 대신 쿼리 필터를 사용하려고 할 것입니다. 필터를 허용하는 쿼리 내에 배치 할 수 있습니다.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-filter.html