在带有时间戳的单词的文档中搜索短语或单词

search phrase or words in document with timestamped words

几天来我一直在尝试这样做,我想是时候寻求一点帮助了。
我正在使用 elasticsearch 6.6(我相信如果需要它可以升级)并嵌套 c# net5。
任务是创建一个索引,其中的文档是语音到文本识别的结果,其中所有已识别的单词都有一个时间戳(以便该时间戳可用于查找原始文件中说出该单词的位置).媒体文件中有 1000 多个文本,每个文件时长 4 小时(通常是 5000~15000 字)。

主要想法是将每个文本分成 3 秒长的片段,用该时间片段中的单词创建一个文档,并对其进行索引以便进行搜索。
我认为它不会那么好用,所以下一个想法是为每个 window 的 10~12 个单词创建一个文档扫描文档并一次跳转 2 个单词,这样搜索至少可以匹配一个不错的词组,也有高亮显示。
由于它还远非完美,我认为将每个整个文本作为文档进行索引以保持其连贯性会很好,问题是与每个单词相关联的时间戳。为了保持这种关系,我尝试在文档中使用嵌套对象:

PUT index-tapes-nested
{
    "mappings" : {
        "_doc" : {
            "properties" : {
                "$type" : { "type" : "text" },
                "ContentId" : { "type" : "long" },
                "Inserted" : { "type" : "date" },
                "TrackId" : { "type" : "long" },
                "Words" : {
                    "type" : "nested",
                    "properties" : {
                      "StartMillisec" : { "type" : "integer" },
                      "Word": { "type" : "text" }
                    }
                }
            }           
        }
    }
}

这有点管用,但我不知道如何编写在索引中搜索的查询。
一个非常基本的查询可以是例如:

GET index-tapes-nested/_search
{
  "query":{
    "nested":{
      "path":"Words",
      "score_mode":"avg",
      "query":{
        "match":{
          "Words.Word": "a bunch of things"
        }
      },
      "inner_hits": {}
    }
  }
}

但是类似的东西,尤其是平均得分,给出了低质量的结果; hits中可能有正确的文档,但没有得到词序,所以不确定,不清楚。
据我了解,span_near 在这些情况下应该派上用场,但我没有得到任何结果:

GET index-tapes-nested/_search
{
  "query": {
    "nested":{
      "path":"Words",
      "score_mode": "avg",
      "query": {
        "span_near": {
          "clauses": [
            { "span_term": { "Words.Word": "bunch" }},
            { "span_term": { "Words.Word": "of" }},
            { "span_term": { "Words.Word": "things" }}
          ],
          "slop": 2,
          "in_order": true
        }
      }
    }
  }
}

我不太了解elasticsearch,也许我应该改变方法并改变模型,也许重写查询就足够了,我不知道,这很耗时,所以非常感谢任何帮助(这是一项相当常见的任务吗?)。为了简洁起见,我删减了一些东西和一些想法,如果需要,我可以提供一些数据或其他示例。
我在使用 c# nest 客户端管理嵌套索引时也遇到了问题,但那是另一回事了。

我猜这可以用几种方式来解释,比如字段的“替代流”,或者每个词的元数据,等等。我需要的是:https://github.com/elastic/elasticsearch/issues/5736 但还没有完成,所以现在我想我会使用 annotated_text 插件或 10 个单词 window.
我不知道在索引单个单词的情况下是否可以查询 'restores' 原始文本的完整性(这意味着 1. 按 id 对它们进行分组 2. 对它们进行排序)以便 elasticsearch 可以提供期望的结果。
如果有什么有趣的东西,或者我是否可以破解一些东西来获得我需要的东西(比如 require_field_match 或间隔查询),我会继续在文档中搜索。