【问题标题】:ElasticSearch and Python - Correct methodolgyElasticSearch 和 Python - 正确的方法
【发布时间】:2014-02-21 00:17:48
【问题描述】:

我正在为我拥有的文章列表构建一个搜索引擎。很多人建议我使用弹性搜索进行全文搜索。我写了以下代码。有用。但我有一些问题。

1) 如果同一篇文章被添加了两次——即 indexdoc 为同一篇文章运行两次,它接受它并添加文章两次。有没有办法在搜索索引中有一个“唯一键”。

2) 如何更改评分/排名功能?我想更重视标题?

3) 无论如何,这是正确的方法吗?

4) 如果有拼写错误,我如何显示相关结果?

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

【问题讨论】:

    标签: python search full-text-search elasticsearch full-text-indexing


    【解决方案1】:

    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"]}}
    

    随着这一变化title 的重要性将是字段text 的两倍

    3) 作为概念证明还不错。

    4) 这是一个很大的话题,我认为你应该查看suggesters的文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多