【发布时间】:2014-04-24 15:29:55
【问题描述】:
我们在索引中存储了一个title 字段,并希望将该字段用于两个目的:
- 我们正在使用 ngram 过滤器进行分析,以便提供自动完成和即时结果
- 我们希望能够在
title字段上使用 ASC 排序而不是分数来列出结果。
索引/过滤器/分析器的定义如下:
array(
'number_of_shards' => $this->shards,
'number_of_replicas' => $this->replicas,
'analysis' => array(
'filter' => array(
'nGram_filter' => array(
'type' => 'nGram',
'min_gram' => 2,
'max_gram' => 20,
'token_chars' => array('letter','digit','punctuation','symbol')
)
),
'analyzer' => array(
'index_analyzer' => array(
'type' => 'custom',
'tokenizer' =>'whitespace',
'char_filter' => 'html_strip',
'filter' => array('lowercase','asciifolding','nGram_filter')
),
'search_analyzer' => array(
'type' => 'custom',
'tokenizer' =>'whitespace',
'char_filter' => 'html_strip',
'filter' => array('lowercase','asciifolding')
)
)
)
),
我们遇到的问题是当我们对title 字段进行排序时,结果无法预测。经过一番搜索,我们在 ElasticSearch 的 sort 手册页的末尾找到了这个... (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#_memory_considerations)
对于基于字符串的类型,排序依据的字段不应被分析/标记化。
我们怎样才能既分析该字段,又对其进行排序呢?我们是否需要使用not_analyzed 将字段存储两次以进行排序?由于字段_source 也将title 值存储为原始状态,因此不能用于排序吗?
【问题讨论】:
标签: sorting elasticsearch elastica