我有一个solr文本字段如下。
<field name="news_headline_ln_en" type="text_en" indexed="true" stored="true"/>
当查询按如下方式对结果进行排序时,它不会按正确的字母顺序显示结果。
http://localhost:8983/solr/news/select?fl=news_headline_ln_en&indent=on&q=*:*&rows=100&sort=news_headline_ln_en%20desc&start=0&wt=json
结果回复:
{
"responseHeader":{
"status":0,
"QTime":45,
"params":{
"q":"*:*",
"indent":"on",
"fl":"news_headline_ln_en",
"start":"11610",
"sort":"news_headline_ln_en asc",
"rows":"12021",
"wt":"json",
"_":"1478085256196"}},
"response":{"numFound":12621,"start":11610,"docs":[
{
"news_headline_ln_en":"Eleven stocks up despite UAE markets decline"},
{
"news_headline_ln_en":"\nOil Prices Decline on Fed Rate Rise Jitters"},
{
"news_headline_ln_en":"Euro unemployment rate declines in February"},
{
"news_headline_ln_en":"Investors Holding’s Q4 profits decrease"},
{
"news_headline_ln_en":"DED honors ‘On Time’ in Oud Metha for excellence"},
{
"news_headline_ln_en":"\nTreasures From The Deep -- WSJ"},
{
"news_headline_ln_en":"Tunisia shares deepen early losses"},
{
"news_headline_ln_en":"EGX deepens losses in week"},
{
正如您所看到的,它没有按字母顺序排序。任何人都知道可能的原因吗?感谢任何帮助。
答案 0 :(得分:1)
你做不到。 text_en
不适合排序,因为它会对输入进行标记并将文本分解为单独的标记。这些令牌不能用于分类。
将text_en
字段中的内容复制到适合排序的 字段的解决方案is to add a copyField
instruction,例如string
字段或带有KeywordTokenizer的文本字段(允许您将字符串小写,但将其保留为单个标记 - 如果您希望排序不区分大小写)。如果您正在使用字符串字段,那么如果您希望排序不区分大小写,则必须先自动编制字段小写字段。
<copyField source="news_headline_ln_en" dest="news_headline_ln_en_sort" />
..然后使用sort=text_sort
进行排序。如果您只需要复制原始字符串的开头,则可以使用maxChars
设置(例如,如果您按文章的开头排序,则可能只需要文章的前20-40个字符为了有用的种类)。