elasticsearch Elasticsearch高级自动完成,elasticsearch,autocomplete,lucene,autosuggest,elasticsearch,Autocomplete,Lucene,Autosuggest" /> elasticsearch Elasticsearch高级自动完成,elasticsearch,autocomplete,lucene,autosuggest,elasticsearch,Autocomplete,Lucene,Autosuggest" />

elasticsearch Elasticsearch高级自动完成

elasticsearch Elasticsearch高级自动完成,elasticsearch,autocomplete,lucene,autosuggest,elasticsearch,Autocomplete,Lucene,Autosuggest,我想用Elasticsearch自动完成用户输入。现在有大量的教程介绍如何做到这一点,但没有一个真正详细的内容 我在查询中遇到的最后一个问题是,它应该对不是真正的“自动完成”的结果进行评分。例子: 是: 我输入:“床” 我发现:“床”、“大床”、“花式床”、“床架” 想要: 我输入:“床” 我发现:“床”、“床架”、“其他“床XXX”结果”、“花式床”、“大床” 因此,我希望Elasticsearch首先完成“向右”,如果这有意义的话。然后使用前面有单词的结果。 我试过完成建议,我不做我想做的其

我想用Elasticsearch自动完成用户输入。现在有大量的教程介绍如何做到这一点,但没有一个真正详细的内容

我在查询中遇到的最后一个问题是,它应该对不是真正的“自动完成”的结果进行评分。例子: 是:

我输入:“床”

我发现:“床”、“大床”、“花式床”、“床架”

想要:

我输入:“床”

我发现:“床”、“床架”、“其他“床XXX”结果”、“花式床”、“大床”

因此,我希望Elasticsearch首先完成“向右”,如果这有意义的话。然后使用前面有单词的结果。 我试过完成建议,我不做我想做的其他事情,但也有同样的问题

在德语中有很多像Bigbed这样的词的例子(我知道这在英语中不是一个真正的词。但我不希望这些词有很高的效果。但是因为它们比Bed Frame更接近匹配(因为这是两个标记),所以它们显示得很高

这是我目前的查询:

POST autocompletion/_search?pretty
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "keyword": {
            "query": "Bed",
            "fuzziness": 1,
            "minimum_should_match": "100%"
          }
        }
      },
      "field_value_factor": {
        "field": "bias",
        "factor": 1
      }
    }
  }
}

如果您在查询时使用elasticsearch completion suggester,如中所述,如:

{
    "suggest": {
        "song-suggest" : {
            "prefix" : "bed", 
            "completion" : { 
                "field" : "suggest" 
            }
        }
    }
}
您将获得:

{
    "took": 13,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": 0.0,
        "hits": []
    },
    "suggest": {
        "song-suggest": [
            {
                "text": "bed",
                "offset": 0,
                "length": 3,
                "options": [
                    {
                        "text": "Bed",
                        "_index": "autocomplete",
                        "_type": "_doc",
                        "_id": "1",
                        "_score": 34.0,
                        "_source": {
                            "suggest": {
                                "input": [
                                    "Bed"
                                ],
                                "weight": 34
                            }
                        }
                    },
                    {
                        "text": "Bed Frame",
                        "_index": "autocomplete",
                        "_type": "_doc",
                        "_id": "3",
                        "_score": 34.0,
                        "_source": {
                            "suggest": {
                                "input": [
                                    "Bed Frame"
                                ],
                                "weight": 34
                            }
                        }
                    }
                ]
            }
        ]
    }
}
如果要改用
搜索
API,可以使用2个查询:

  • 前缀查询“bed****”
  • 以“床”开头的术语
  • 以下是映射:

    {
        "mappings": {
            "_doc" : {
                "properties" : {
                    "suggest" : {
                        "type" : "text",
                                          "fields" : {
                                                "keyword" : {
                                                    "type" : "keyword"
                                                }
                                            }
                    }
                }
            }
        }
    
    以下是搜索查询:

    {
        "query" : {
                "bool" : {
                    "must" : [
                        {
                            "match" : {
                                "suggest" : "Bed"
                            }
                        }
                    ],
                    "should" : [
                        {
                            "prefix" : {
                                "suggest.keyword" : "Bed"
                            }
                        }
                    ]
                }
            }
    }
    

    should子句将增强以“Bed”开头的文档。Et voilá!确定我的示例有点不好。如果我添加Bigbed作为建议(我没有一个好的英语示例,德语中有很多(Beistellbett)),完成建议器将在床后返回Bigbed。因为它与床比床框更接近(2个标记).我不想要任何像XXXBed一样的结果(最好的情况我希望他们得分最低)我已经更新了答案,使用搜索API,想法就在这里,你可以根据自己的需要进行一些调整。现在仍然会返回类似花式床作为第二个而不是床框架的内容。你是否使用此映射创建了一个新索引?我刚刚测试过,这在你的3个示例中运行良好。