当前位置: 首页 > 知识库问答 >
问题:

用Elasticsearch匹配段落包含索引中的句子

郑琦
2023-03-14

我使用elasticsearch创建了一个程序,允许在文本中找到引用圣经的所有地方,以及提到经文的地方。我在elasticsearch中索引了圣经的所有经文,当我通过部分键入经文进行搜索时,每一经文都是一个文档,我找到了正确的结果(即使出错)如何浏览文本来找到引用经文(甚至部分)的所有地方,从而将经文的来源归因于他们?和容忍错误(我想用模糊性参数或使用同义词)

我的索引示例:

{"index":{"_index":"test","_type":"","_id":1}}
{"fields":{"year":3560,"book":"1","chapter":1,"section":1,"text":"others words consectetur adipiscing and others words"},"id":"test1","type":"add"}
{"index":{"_index":"test","_type":"","_id":2}}
{"fields":{"year":3560,"book":"2","chapter":3,"section":2,"text":"others words a sagittis nisl quam and others words"},"id":"test2","type":"add"}
{"index":{"_index":"test","_type":"","_id":3}}
{"fields":{"year":3560,"book":"3","chapter":1,"section":5,"text":"others words Aliquam ultrices auctor pharetra and others words"},"id":"test3","type":"add"}
{"index":{"_index":"test","_type":"","_id":4}}
{"fields":{"year":3560,"book":"4","chapter":2,"section":4,"text":"others words Proin ut vestibulum and others words"},"id":"test4","type":"add"}
{"index":{"_index":"test","_type":"","_id":5}}
{"fields":{"year":3560,"book":"5","chapter":1,"section":5,"text":"others words Aenean pretium tincidunt aliquet and others words"},"id":"test5","type":"add"}
{"index":{"_index":"test","_type":"","_id":6}}
{"fields":{"year":3560,"book":"6","chapter":2,"section":1,"text":"others words In vitae sagittis and others words"},"id":"test6","type":"add"}
{"index":{"_index":"test","_type":"","_id":7}}
{"fields":{"year":3560,"book":"7","chapter":7,"section":7,"text":"others words ligula laoreet pharetra and others words"},"id":"test7","type":"add"}
{"index":{"_index":"test","_type":"","_id":8}}
{"fields":{"year":3560,"book":"8","chapter":1,"section":4,"text":"others words luctus eros a pretium and others words"},"id":"test8","type":"add"}
{"index":{"_index":"test","_type":"","_id":9}}
{"fields":{"year":3560,"book":"9","chapter":1,"section":7,"text":"others words ullamcorper eu id quam and others words"},"id":"test9","type":"add"}
{"index":{"_index":"test","_type":"","_id":10}}
{"fields":{"year":3560,"book":"10","chapter":5,"section":4,"text":"others words Nullam ac enim ac lacus hendrerit and others words"},"id":"test10","type":"add"}

我需要找到索引中的段落中的所有事件,以便恢复它们的来源:

Lorem ipsum dolor sit amet,consectetur adipiscing Elit。Nulla rhoncus,Nulla vitae porta eismod,purus nisl faucibus nunc,a sagittis nisl quam id arcu.Sed sit amet arcu Sed dui auctor bibendum。前庭扫描电镜,id rutrum felis。Phasellus sagittis justo site amet justo ferciat,id scelerisque eros cursus。Quisque dapibus finibus Euismod。Proin dui urna,auctor ut gravida quis,fringilla quis Velit。Donec sed pulvinar Leo。Sed pulvinar pharetra arcu nec egestas。莫里斯·非达皮布斯迪亚姆。贝伦特斯克自由贝伦特斯克。Aliquam ultrices auctor Pharetra。Cras ullamcorper,odio sit amet aliquam convallis,magna nibh gravida nunc,sit amet volutpat elit purus eget Lectus。Pellentesque eu est a risus euismod finitiat。Duis id erat Portitor,sodales justo non,aliquet ex。Etiam tincidunt neque ut nisi commodo Auctor。Sed congue urna ac tellus scelerisque Hendrerit。大叶毛。费利乌Proin ac felis。在vitae sagittis erat,nec luctus sapien中。埃尼安·普雷蒂安·丁德特等分。enim vel ligula laoreet Pharetra的Morbi。Sed Dignissin lucts eros a pretium。前庭菌molestie molestie nisi,vitae scelerisque nibh bibendum nec.Donec laoreet sapien sed vehicula Dictum。Nullam ac enim ac lacus hendrerit tempor et vitae neque。leo pretium的Quisque,efficitur augue vitae,congue Eros。前庭前庭。Donec tristique orci erat,nec imperdiet nulla commodo UT。Nam non odio vel quam cursus ullamcorper eu id quam。Duis volutpat,nisl eu interdum mattis,augue ipsum mollis leo,eget efficitur orci augue eget leo。整数feugiat inprisis dolor ut vehicula。梅塞纳斯·奎斯·费贾特·马萨。Curabitur feugiat odio eget ligula tincidunt Sodales。Donec feugiat dapibus lectus,non maximus dui rhoncus vitae。Phasellus eget massa faucibus,tristique nibh sed,aliquet metus.

我不知道我是否说得够清楚了,但请不要犹豫地问我是否需要更精确的信息

我认为这个问题是由Aho-Corasick算法处理的,但我不知道如何将它集成到elasticsearch中

谢谢!

共有1个答案

巫马善
2023-03-14

如果我能正确地理解你的问题,那么你所寻求的就是能够

“部分诗句”:质疑

并从elasticsearch中获取源文档作为响应,结果显示在其中搜索的诗句(这就是高亮显示的意思)

下面是实现相同的最简单的查询

GET <index_name>/_search
{
 "query": {
   "match": {
     "message": "partial verse"
   }
 } ,
    "highlight" : {
        "fields" : {
            "message": {}
        }
    }
}

作为回应,您将得到如下内容

"hits" : [
      {
        "_index" : "testSample",
        "_type" : "_doc",
        "_id" : "TkdvGXAB5bHyIJQ-QRow",
        "_score" : 0.2876821,
        "_source" : {
          "bookName" : "bible",
          "message" : "this is a good book"
        },
        "highlight" : {
          "message" : [
            "<em>this</em> is a good book"
          ]
        }
      }
    ]

响应是不言自明的,在不同的部分中,您可以获得更高的结果。

 类似资料:
  • 我试图在ElasticSearch中运行类似的字段查询:

  • 问题内容: 我正在尝试在ElasticSearch中运行类似的字段查询: 意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。 我该怎么做? 问题答案: 我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引: 然后,您可以索引一些数据: 最后,您可以像这样搜索: 然后您将获得前两个文档,

  • 问题内容: 我有一个与此类似的文件: 我要查询以查找所有包含“ a”的人(鲍勃和玛丽)。如何编写查询? 编辑: 当前查询: 问题答案: 在字段上使用术语过滤器/查询(例如)可以满足您的需求。假设您只想匹配满足该条件的任何文档,则完整查询将类似于: 之所以可行,是因为值数组是分别索引的,并且如果查询的字段是列表,则术语查询将查找包含包含该值的数组的文档。

  • 我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术

  • 问题内容: 我有以下Elasticsearch查询。 假设我想从此搜索查询中排除。该文档指出以下内容: 它还支持通配符,例如:test ,以及“添加”(+)和“删除”(-)的功能,例如:+ test ,-test3。 据我了解,我应该能够执行以下操作。 但是,出现以下错误。 如果删除加号和减号,则查询运行正常。如果添加通配符,它​​似乎可以工作,例如以下查询。 但是,这并不是我真正想要的。 当我使

  • 我有一个pdf摘录文本,看起来像这样 ======================================== 标题 字幕 Lorem Ipsum只是印刷的虚拟文本 以及排版业。Lorem Ipsum已被删除 自16世纪以来业界标准的虚拟文本。 字幕 Lorem Ipsum只是打印和打印的虚拟文本 排版业。Lorem Ipsum一直是业界 自16世纪以来的标准虚拟文本。 =========