2017-04-11 8 views
2

색인에 "text"유형의 간단한 필드가 있습니다.ElasticSearch match score

"keywordName": { 
      "type": "text" 
     } 

내가 이미 삽입이 문서가 "삼성", "삼성 은하", "삼성 커버", "삼성 충전기". 나는 간단한 "일치"쿼리를 한 경우

, 결과는 불안과 같습니다

검색어 :

GET keywords/_search 
{ 
    "query": { 
    "match": { 
     "keywordName": "samsung" 
    } 
    } 
} 

결과 :

{ 
    "took": 7, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 4, 
    "max_score": 1.113083, 
    "hits": [ 
     { 
     "_index": "keywords", 
     "_type": "keyword", 
     "_id": "samsung galaxy", 
     "_score": 1.113083, 
     "_source": { 
      "keywordName": "samsung galaxy" 
     } 
     }, 
     { 
     "_index": "keywords", 
     "_type": "keyword", 
     "_id": "samsung charger", 
     "_score": 0.9433406, 
     "_source": { 
      "keywordName": "samsung charger" 
     } 
     }, 
     { 
     "_index": "keywords", 
     "_type": "keyword", 
     "_id": "samsung", 
     "_score": 0.8405092, 
     "_source": { 
      "keywordName": "samsung" 
     } 
     }, 
     { 
     "_index": "keywords", 
     "_type": "keyword", 
     "_id": "samsung cover", 
     "_score": 0.58279467, 
     "_source": { 
      "keywordName": "samsung cover" 
     } 
     } 
    ] 
    } 
} 

첫 번째 질문 : "삼성은"하지 않은 이유 최고 점수?

두 번째 질문 : "samsung"이 가장 높은 점수를 얻는 쿼리 또는 분석기를 만들려면 어떻게해야합니까?

+0

기본적으로 http://stackoverflow.com/questions/43257656/elasticsearch-analyzer-on-text-field와 같은 질문을하고 있습니다. 귀하의 첫 번째 질문에 대한 답변은 https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html입니다. 두 번째 질문에 대한 대답은 내가 이미 답장 한 다른 게시물입니다. –

+0

질문은 동일하지만 다른 색인과 동일한 색인 및 분석기를 사용하고 "samsungs"를 검색하면 토큰이 "samsung"이므로 검색어가 작동하지 않고 일치 검색어가 "samsung"을 반환합니다 galaxy "... – Gun

+0

그 이유는 인덱스에 대한 매핑과 이러한 요구 사항에 대한 쿼리 목록을 만들기 전에 모든 요구 사항을 정리하는 것이 중요하기 때문입니다. –

답변

1

previous reply에서와 동일한 색인 설정 (분석기, 필터, 매핑)에서 시작하여 다음 해결책을 제안합니다. 그러나 앞서 언급했듯이이 인덱스에서 검색해야하는 항목에 대한 모든 요구 사항을 정리하고이 모든 것을 완전한 솔루션으로 고려해야합니다.

DELETE test 
PUT test 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "custom_stop": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "my_stop", 
      "my_snow", 
      "asciifolding" 
      ] 
     } 
     }, 
     "filter": { 
     "my_stop": { 
      "type": "stop", 
      "stopwords": "_french_" 
     }, 
     "my_snow": { 
      "type": "snowball", 
      "language": "French" 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test": { 
     "properties": { 
     "keywordName": { 
      "type": "text", 
      "analyzer": "custom_stop", 
      "fields": { 
      "raw": { 
       "type": "keyword" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
POST /test/test/_bulk 
{"index":{}} 
{"keywordName":"samsung galaxy"} 
{"index":{}} 
{"keywordName":"samsung charger"} 
{"index":{}} 
{"keywordName":"samsung cover"} 
{"index":{}} 
{"keywordName":"samsung"} 

GET /test/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "keywordName": { 
       "query": "samsungs", 
       "operator": "and" 
      } 
      } 
     }, 
     { 
      "term": { 
      "keywordName.raw": { 
       "value": "samsungs" 
      } 
      } 
     }, 
     { 
      "fuzzy": { 
      "keywordName.raw": { 
       "value": "samsungs", 
       "fuzziness": 1 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "size": 10 
} 
+0

요구 사항에 대해 동의합니다. 문제는 제 경우에 일종의 진화입니다. 필자는 완전한 데이터 묶음을 가지고 있지 않아서 철저한 요구 사항 목록을 작성하는 것이 상당히 문제가됩니다. – Gun