提升完成建议器的输入字段

时间:2013-11-19 14:37:34

标签: search full-text-search elasticsearch

我使用完成建议器进行自动完成..这些是我的文件

/* doc 1 */
{
    Title: CineMAX: Inorbit Mall, Cyberabad
    Suggest: {
        input: [
            CineMAX:
            Inorbit
            Mall
            Cyberabad
            CineMAX: Inorbit Mall, Cyberabad
        ]
        output: CineMAX: Inorbit Mall, Cyberabad
        payload: {
        ....
        }
        weight: 1
    }
}

/* doc 2 */
{
    Title: INOX: Kolkata
    Suggest: {
        input: [
            INOX:
            Kolkata
            INOX: Kolkata
        ]
        output: INOX: Kolkata 
        payload: {
            ....
        }
        weight: 1
    }
}

我正在使用完成查询,如下所示

{
    "suggestion":{
       "text":"inox",
       "completion":{
           "field":"Suggest",
           "fuzzy":{
               "edit_distance":1,
               "transpositions":true,
               "prefix_length":1,
               "min_length":4
           }
       }

    }       
}

但是我在这里得到输出

  1. CineMAX:Inorbit Mall,Cyber​​abad,
  2. INOX:加尔各答
  3. 我想更优先考虑完全匹配..所以我想要 INOX:加尔各答在顶部..

    我已经使用php explode()拆分了标题..所以我也可以匹配中间的单词..我不知道如何提高标题中的特定单词..Plz帮助我.. 提前致谢

2 个答案:

答案 0 :(得分:1)

您可以尝试运行两个完成查询,如下所示:

{
    "text": "inox",
    "suggestion_not_fuzzy": {
       "completion": {
           "field": "Suggest"
       }
    },
    "suggestion_fuzzy": {
       "completion": {
           "field": "Suggest",
           "fuzzy": {
               "edit_distance": 1,
               "transpositions": true,
               "prefix_length": 1,
               "min_length": 4
           }
       }
    }
}

然后尝试从“suggestion_not_fuzzy”获取结果,如果空回退到“suggestion_fuzzy”

答案 1 :(得分:1)

您想要的是对标题最短的文档给予更多权重。如果两个文档与您的查询匹配,那么标题最短的文档意味着信息较少,仍然可以找到它,因此它必须具有更高的分数。

你可以做的是在索引时间,设置:

weight = 1000 - number_of_characters_of_document_title (1000 or any other number : was just trying to have a positive weight)