关于inner_hits

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于inner_hits相关的知识,希望对你有一定的参考价值。

参考技术A

本文将从以下几个方面回答有关inner_hits的一些问题:

inner_hits是ElasticSearch进行nested,has_parent,has_child搜索时的一个选项,用来标记命中文档位置的。以官方文档中的例子为例。

索引”blog“有一个类型为”nested“的字段”comments“,我们写入了一个文档,其中包含了2个”comments“。下面我们对文档进行搜索,我们先不添加”inner_hits“看一下结果是怎么样:

可以看到,这个结果和正常搜索没有太多区别。

现在我们在搜索时加入”inner_hits“看一下效果,为了简单起见,”inner_hits“不使用任何选项。

我们可以看到结果比刚才多了一个”inner_hits“块:

可以看到,”inner_hits“中包含了关于此处文档的一些匹配信息,其中比较重要的有两个:

”nested“,告诉我们此次命中是文档中的那个nested字段,我们的例子里只有一个”nested“类型的字段,而实际上一个索引中,默认最多可以有50个”nested“类型的字段,这个值由索引的配置项” index.mapping.nested_fields.limit “控制。

”_source“,告诉我们当前命中的是哪个文档。我们的例子里,查询的条件是”number=2“,因此在 ”_source“部分返回了对应的那个文档。“inner_hits”有一个选项“_source”,默认值是true,如果将其置为false可以在返回结果中不显示”_source“的内容。

在ElasticSearch中,nested对象是以独立的隐藏文档的方式进行存储的,以上面的例子为例,id为1的文档,有2个comments类型的nested对象,最终存储在ES中的其实是三个文档。而relation类型的对象,父子文档的结构可以完全不同,却是存储在同一个索引中。在进行nested search或者has_child,has_parent search的时候我们可能需要知道,我们的搜索到底是匹配了哪些更细粒度的文档。因此需要inner_hits。

最简单的用法,如上文例子中使用的一样。直接加入一个空的“inner_hits”块即可。除此之外还有一些更细粒度的控制选项:

"from": 指定从文档内部对象array的某个位置开始显示inner_hits。比如说如果from指定为2,那么位置在0和1的文档即使在搜索中被匹配到了,也不会显示在inner_hits里。

"size": 最多显示inner_hits的文档数。

"sorted": 返回inner_hits 对象的排序字段。

"name": 当存在有多个nested字段在搜索中被涉及到时,指定其中某个字段作为inner_hits的显示字段。

更多可参考官方文档的内容

https://www.elastic.co/guide/en/elasticsearch/reference/7.2/search-request-inner-hits.html

由于nested search,has_parent search,has_child search的文档对象存储方式,在进行相关搜索时,会涉及到主文档之外的其他文档,我们需要一种手段来指出命中的原因。inner_hits应运而生,它可以支持命中文档在多个文档组成的array中的位置,以及具体是哪个nested对象被命中了。总而言之,这是一种帮助我们理解搜索结果的方式或者手段。

主页链接发送到关于/关于页面无法回家

【中文标题】主页链接发送到关于/关于页面无法回家【英文标题】:homepage link sends to about/about page unable to get home 【发布时间】:2019-09-10 04:25:16 【问题描述】:

我正在尝试返回本地主机的主页。但是,当尝试使用一些 python 脚本链接到主页时,它会将我发送到我的论坛页面。更奇怪的是,我的论坛页面位于 forum/forum/。在使用 html href srcipt 时,虽然它会回到家中。也加载在家里。这是怎么回事?我正在使用 django 2.2 和 python 3.6

#tcghome/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('hometemplate.urls')),
    path('forum/', include('hometemplate.urls')),
    path('admin/', admin.site.urls),
]



#hometemplate/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name ='tcg-home'),
    path('forum/', views.forum, name ='tcg-forum'),
]




#hometemplate/views.py
from django.shortcuts import render
from django.http import HttpResponse


posts = [
    
        'author': 'Pyralis',
        'title': 'Test 1',
        'content': 'test content',
        'date_posted': 'April 19, 2019'
    ,
    
        'author': 'Pyro',
        'title': 'Test 2',
        'content': 'test content how are you',
        'date_posted': 'April 13, 2019'
    ,
]


def home(request):
    context = 
        'posts': posts
    
    return render(request, 'hometemplate/home.html', context)
    
def forum(request):
    return render(request, 'hometemplate/forum.html', 'title': 'About')



#base.html

<a class="navbar-brand mr-4" href="% url 'tcg-home' %">The Coddiwomple Ginger</a>
<a class="nav-item nav-link" href="/">Home</a>
<a class="nav-item nav-link" href="% url 'tcg-forum' %">Forum</a>

#web source
 <a class="navbar-brand mr-4" href="/forum/">The Coddiwomple Ginger</a>
 <a class="nav-item nav-link" href="/">Home</a>
 <a class="nav-item nav-link" href="/forum/forum/">Forum</a>

【问题讨论】:

【参考方案1】:

上面的项目 urls.py 你正在导入你的包含函数 2 次,这就是为什么你得到 forum/forum/...

修改你的 tcghome/urls.py:--

    from django.contrib import admin 
    from django.urls import path, include

    urlpatterns = [
      path('', include('hometemplate.urls')),

       path('admin/', admin.site.urls),
    ]

在你的 HTML 中:-----

     #base.html

     <a class="navbar-brand mr-4" href="% url 'tcg-home' %">The CoddiwompleGinger</a>
     <a class="nav-item nav-link" href="% url 'tcg-home' %">Home</a>
     <a class="nav-item nav-link" href="% url 'tcg-forum' %">Forum</a>

试试这个,如果有任何问题,请告诉我。

【讨论】:

以上是关于关于inner_hits的主要内容,如果未能解决你的问题,请参考以下文章

关于数学,关于年少的感动,关于初心

scrapy 关于 rule, 关于多页

JS学习笔记关于选项卡,关于this,关于innerHTML

关于唯典冰淇淋新闻页的布局

关于prototype.js的一些技术说明

主页链接发送到关于/关于页面无法回家