ElasticSearch和Python-正确的方法学
我正在为我的文章列表建立一个搜索引擎。很多人建议我使用弹性搜索进行全文搜索。我编写了以下代码。它起作用了。但我有几个问题 1) 如果同一个项目添加了两次,也就是说,indexdoc为同一个项目运行了两次,那么它将接受该项目并添加两次该项目。有没有办法在搜索索引中有一个“唯一键” 2) 如何更改评分/排名功能?我想更重视标题 3) 这是正确的方法吗 4) 如果有拼写错误,如何显示相关结果ElasticSearch和Python-正确的方法学,python,search,full-text-search,
elasticsearch,full-text-indexing,Python,Search,Full Text Search,
elasticsearch,Full Text Indexing,我正在为我的文章列表建立一个搜索引擎。很多人建议我使用弹性搜索进行全文搜索。我编写了以下代码。它起作用了。但我有几个问题 1) 如果同一个项目添加了两次,也就是说,indexdoc为同一个项目运行了两次,那么它将接受该项目并添加两次该项目。有没有办法在搜索索引中有一个“唯一键” 2) 如何更改评分/排名功能?我想更重视标题 3) 这是正确的方法吗 4) 如果有拼写错误,如何显示相关结果 from elasticsearch import Elasticsearch from crsq.model
from elasticsearch import Elasticsearch
from crsq.models import ArticleInfo
es = Elasticsearch()
def indexdoc(articledict):
doc = {
'text': articledict['articlecontent'],
'title' : articledict['articletitle'],
'url': articledict['url']
}
res = es.index(index="article-index", doc_type='article', body=doc)
def searchdoc(keywordstr):
res = es.search(index="article-index", body={"query": {"query_string": {"query": keywordstr}}})
print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
print("%(url)s: %(text)s" % hit["_source"])
def indexurl(url):
articledict = ArticleInfo.objects.filter(url=url).values()
if len(articledict):
indexdoc(articledict)
return
1) 您必须为文档指定一个id。编制索引时,必须添加参数id
res = es.index(index="article-index", doc_type='article', body=doc, id="some_unique_id")
2) 有多种方法可以做到这一点,但例如,您可以通过稍微更改查询来增强标题:
{"query": {"query_string": {"query": keywordstr, "fields" : ["text", "title^2"]}}
通过此更改,标题
将具有该字段的双重重要性文本
3) 作为一个概念的证明是不错的
4) 这是一个很大的话题,我认为你应该检查