【问题标题】:Elastic Search Highlight API highlight all macthed wordsElasticsearch Highlight API 突出显示所有匹配的单词
【发布时间】:2017-02-09 13:27:14
【问题描述】:

我在弹性搜索中索引了如下文档。

文档:

{{"ID:1, "Cont": "yes there is a match"},
  {"ID":2, "Cont": "check this for it"} ....}

当我使用高亮搜索文档时。

http://localhost:9200/sample/html/_search
{
    "query": 
        {"bool": {  
            "should": [{"match": {"Content": "check mate"}}]}},
    "highlight" : {
        "fields" : {
            "Content" : {}
        }
    }
}

输出如下。

"highlight": {
      "Content": ["<em>check</em> blaa", "blaa blaa<em>check</em>"]
}

从突出显示的输出看来,check 在两个地方匹配,但是当我打开文档并看到 check 出现了 15 次,并且还有一个匹配配合在文档中。

  1. 有没有办法在突出显示列中获取所有匹配的单词,即)获取此示例的 check 和 mate。

    2.有没有办法获得匹配出现次数,即)check=15, mate=1

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    第一个问题:

    您可以使用number_of_fragments 选项来获取更多高亮片段。默认情况下,它设置为2(这就是为什么您只能看到 2 个亮点)。例如,如果您想查看更多,可以将其设置为 100。

    您也可以将number_of_fragments 设置为0,这不会分割您的内容以显示亮点,而是会突出显示您的整个内容(然后您将看到所有出现的亮点)。

    文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html#_highlighted_fragments

    第二个问题:

    据我所知,我认为这是不可能的...您必须从我害怕的突出显示结果中计算它们...

    【讨论】:

    • 我可以设置number_of_fragments:0,但内容很大(整个 HTML 页面),但是有没有办法只获取匹配的短语片段而不是整个字段,我无法给出像 100 这样的值number_of_fragments 因为我不知道我得到了多少匹配
    • 除了将number_of_fragments 设置为一个非常大的数字(例如 9999999 ^^')之外,我不知道有任何其他方法,但是如果您只是想计算出现次数,那并不是真正的好方法。 . (但我不知道这可能是个好方法)
    • 我得到了很多误报匹配,所以我试图查看我的查询的哪些标记与索引文档匹配。我可以从中开发一种算法来消除误报匹配。让我们看看我是否能找到一种方法来计算或获取所有匹配的令牌。如果没有,我会尝试你设置一个大数字的想法,看看:)。
    猜你喜欢
    • 2016-11-30
    • 2020-05-28
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2014-04-24
    相关资源
    最近更新 更多