wukong icon indicating copy to clipboard operation
wukong copied to clipboard

请问,搜索的结果能不能带一些文档的属性?

Open xpbliss opened this issue 10 years ago • 21 comments

请问,搜索得到的结果能不能带一些文档的属性。

例如搜索得到的结果包括文档的创建人,创建时间,所属栏目等属性。 我是用数据库的某条记录作索引,返回的结果想带上这条记录的属性。

xpbliss avatar Nov 03 '15 13:11 xpbliss

一般是放在正排索引里,搜索返回的docid再去查找一次,比如例子

https://github.com/huichen/wukong/blob/master/examples/codelab/search_server.go#L120-L138

huichen avatar Nov 05 '15 16:11 huichen

其实,我是想在其创建索引时将文档属性并存入硬盘文件,查找中再读出来,请问该如做呢?

作索引一般是从数据库中读出记录,然后索引存为硬盘文件(顺便存入文档 的一些属性)、查找,以列表形式输出(此时顺便从读出文档的一些其它属性,如创建人、文档URL、所属状态等)。 所以建议wukong做稍许修改,实用性和通用性就更好一些。 例如: 索引时, searcher.IndexDocument(120, types.DocumentIndexData{Attri: types.Attri{Title: "标题",Author:"我"}, Content: "数据库某条记录内容"}) //带上属性存入硬盘 搜索时, aa := searcher.Search(types.SearchRequest{Text: "记录"}) for k, _ := range aa.Docs { fmt.Println(aa.Docs[k].DocId, aa.Docs[k].Attri) //顺便输出属性,以便更容易形成列表。 }

xpbliss avatar Nov 06 '15 23:11 xpbliss

这个可能是小众需求,多数情况下,拿到docID再去外部存储取属性就好了,比如redis等。

搜索引擎只负责索引和排序,不同的功能最好还是分开的好。

huichen avatar Nov 27 '15 04:11 huichen

其实我建议把docId换成string类型,至于大小排序,可以用户自己来控制,这样在DocId中可以带上一些简单属性,比如数据库、集合名、类别等信息

andeya avatar Nov 29 '15 09:11 andeya

@huichen 作者你的这个项目我已经烂熟于心了,每行代码我记得清清楚楚,真心想把悟空完善起来,我是做大数据的,希望把它用到项目中。。。

andeya avatar Nov 29 '15 09:11 andeya

string的overhead太多,建议在引擎外部保存string到uint64的转换关系

huichen avatar Nov 29 '15 14:11 huichen

如何将查出的结果列表显示,不可能只是docid啊。要列表,还得用docid再从数据库中再逐个查一次?例如得带上对应的title之类属性最好了。

xpbliss avatar Feb 17 '16 14:02 xpbliss

如何将查出的结果列表显示,不可能只是docid啊。 要列表,还得用docid再从数据库中再逐个查一次?例如得带上对应的title之类属性最好了。

xpbliss avatar Feb 17 '16 14:02 xpbliss

我这里是对mongo的字段进行全文索引,希望使用string作为docid。

csrgxtu avatar Aug 04 '16 08:08 csrgxtu

lucene 记得有这么个功能,除了有文档的id,还有文档的部分字段内容属性。

csrgxtu avatar Aug 04 '16 09:08 csrgxtu

@csrgxtu 这个是 data_node 的功能,我们内部版本已经基于 kubernetes 在开发分布式版本,也许将来会开源出来。

huichen avatar Aug 04 '16 09:08 huichen

@huichen ,我也在我们公司系统中使用了wukong,简单暴力,不用lucene就是因为与现有的Go集成有隔阂。谢谢你了。

csrgxtu avatar Aug 04 '16 12:08 csrgxtu

@csrgxtu 感谢支持!

huichen avatar Aug 04 '16 13:08 huichen

搜索结果的列表显示不可能只是docId吧?! 一般要有时间、标题等简要信息。

如果知道许多个docId,再一个个select从数据库中查找,效率也太低了吧。

强烈建议wukong做稍许修改,实用性和通用性就更好一些。 例如: 索引时, searcher.IndexDocument(120, types.DocumentIndexData{Attri: types.Attri{Title: "标题",Author:"我"}, Content: "数据库某条记录内容"}) //带上属性 搜索时, aa := searcher.Search(types.SearchRequest{Text: "记录"}) for k, _ := range aa.Docs { fmt.Println(aa.Docs[k].DocId, aa.Docs[k].Attri) //顺便输出属性,以便更容易形成列表。 }

xpbliss avatar Dec 05 '16 10:12 xpbliss

你也可以fork修改呀,估计作者就是这样设计的,是为了解决他们当时遇到的问题。若从模块化的角度,这样也是可以的,我只做这一件事情,剩下的逻辑由相应需要的模块去实现。

csrgxtu avatar Dec 06 '16 00:12 csrgxtu

请问:具体改哪处? @csrgxtu, @huichen

xpbliss avatar Dec 06 '16 00:12 xpbliss

这里还是有问题的,一般搜索引擎会提供搜索结果上下文的显示,那么就需要把所有东西都载入了,那不就把整个数据库载入一样的效果

eruca avatar Dec 06 '16 01:12 eruca

那搜索结果如何列表显示,显示其它的一些属性,并不是要把所有信息都载入。目的很单纯啊,就是列表显示的时候,不仅仅是一个docID,而是要附带一些简单的信息,如时间、作者、标题等。

难道根据docID再一个个select? 希望是仅存入一些简单的属性。

xpbliss avatar Dec 06 '16 01:12 xpbliss

额,我当初直接根据id 查找了数据库,好像wukong的id还不能是string类型呢。要修改的话,就得好好读一下wukong的源码逻辑了。

csrgxtu avatar Dec 07 '16 00:12 csrgxtu

@eruca ,我不能理解你所说的那句话,上下文?

csrgxtu avatar Dec 07 '16 00:12 csrgxtu

我的意思是:比如你要查找 搜索引擎,那么搜索到的结果必然有 XXX搜索引擎XXX,显示给你看啊,可能一篇文章里有好多处搜索引擎呢,那都得显示出来啊,那么基本上这篇索引的文章都载入内存比较不合实际吗

eruca avatar Dec 07 '16 16:12 eruca