0

e コマース Web サイト用のエラスティック検索ベースのオート コンプリート モジュールを作成する予定です。提案に edge_ngram を使用しています。この構成を試しています。

**My index creation :**

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 10,
          "token_chars": [
            "letter","digit"
          ]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "autocomplete",
          "search_analyzer": "autocomplete_search"
        }
      }
    }
  }
}

**Inserting Data**

PUT my_index/doc/1
{
  "title": "iphone s" 
}

PUT my_index/doc/9
{
  "title": "iphone ka" 
}

PUT my_index/doc/11
{
  "title": "iphone ka t" 
}

PUT my_index/doc/15
{
  "title": "iphone 6" 
}

PUT my_index/doc/14
{
  "title": "iphone 6 16GB" 
}

PUT my_index/doc/3
{
  "title": "iphone k" 
}

POST my_index/_refresh

POST my_index/_analyze
{
  "tokenizer": "autocomplete",
  "text": "iphone 6"
}

POST my_index/_analyze
{
  "analyzer": "pattern",
  "text": "iphone 6"
}

**Autocomplete suggestions**
When i am trying to find out closets match to iphone 6.It is not showing correct result.

GET my_index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "iphone 6", 
        "operator": "and"
      }
    }
  }
}


**Above query yielding :**
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 7,
    "max_score": 0.28582606,
    "hits": [
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "1",
        "_score": 0.28582606,
        "_source": {
          "title": "iphone s"
        }
      },
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "9",
        "_score": 0.25811607,
        "_source": {
          "title": "iphone ka"
        }
      },
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "14",
        "_score": 0.24257512,
        "_source": {
          "title": "iphone 6 16GB"
        }
      },
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "3",
        "_score": 0.19100356,
        "_source": {
          "title": "iphone k"
        }
      },
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "15",
        "_score": 0.1862728,
        "_source": {
          "title": "iphone 6"
        }
      },
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "11",
        "_score": 0.16358379,
        "_source": {
          "title": "iphone ka t"
        }
      },
      {
        "_index": "my_index",
        "_type": "doc",
        "_id": "2",
        "_score": 0.15861572,
        "_source": {
          "title": "iphone 5 s"
        }
      }
    ]
  }
}

しかし、結果は次のようになります。

     {
        "_index": "my_index",
        "_type": "doc",
        "_id": "15",
        "_score": 1,
        "_source": {
          "title": "iphone 6"
        }
      }

これについて何か不足している場合はお知らせください。私はこれが初めてなので、より良い結果が得られる可能性のある他の方法を知りません。

4

1 に答える 1