2017-04-11 8 views
2

私のインデックスには単純なタイプの "text"フィールドがあります。ElasticSearchのマッチスコア

"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" 
     } 
     } 
    ] 
    } 
} 

最初の質問: "サムスン" はしていないのはなぜ最高のスコア?

2番目の質問:どのように私に最高の得点として私に "samsung"を与えるクエリまたはアナライザーを作ることができますか?

+0

基本的にはhttp://stackoverflow.com/questions/43257656/elasticsearch-analyzer-on-text-fieldと同じ質問をしています。あなたの最初の質問に対する答えはhttps://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.htmlです。あなたの2番目の質問への答えは私がすでに答えたもう1つの投稿です。 –

+0

質問は全く同じですが、私が他のインデックスと同じインデックス&アナライザを使用し、 "samsungs"を検索するとトークンは "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