【问题标题】:How to use whoosh for searching keywords如何使用 whoosh 搜索关键字
【发布时间】:2016-04-18 01:41:58
【问题描述】:

文章架构:

下面是我创建的文章架构。

class ArticleSchema(SchemaClass):
    title = TEXT(
        phrase=True, sortable=True, stored=True,
        field_boost=2.0, spelling=True, analyzer=StemmingAnalyzer())
    keywords = KEYWORD(
        commas=True, field_boost=1.5, lowercase=True)
    authors = KEYWORD(stored=True, commas=True, lowercase=True)
    content = TEXT(spelling=True, analyzer=StemmingAnalyzer())
    summary = TEXT(spelling=True, analyzer=StemmingAnalyzer())
    published_time = DATETIME(stored=True, sortable=True)
    permalink = STORED
    thumbnail = STORED
    article_id = ID(unique=True, stored=True)
    topic = TEXT(spelling=True, stored=True)
    series_id = STORED
    tags = KEYWORD(commas=True, lowercase=True)

搜索查询

FIELD_TIME = 'published_time'
FIELD_TITLE = 'title'
FIELD_PUBLISHER = 'authors'
FIELD_KEYWORDS = 'keywords'
FIELD_CONTENT = 'content'
FIELD_TOPIC = 'topic'

def search_query(search_term=None, page=1, result_len=10):
    '''Search the provided query.'''
    if not search_term or search_term == '':
        return None, 0
    if not index.exists_in(INDEX_DIR, indexname=INDEX_NAME):
        return None, 0
    ix = get_index()
    parser = qparser.MultifieldParser(
            [FIELD_TITLE, FIELD_PUBLISHER, FIELD_KEYWORDS, FIELD_TOPIC],
            ix.schema)
    query = parser.parse(search_term)
    query.normalize()
    search_results = []
    with ix.searcher() as searcher:
        results = searcher.search_page(
            query,
            pagenum=page,
            pagelen=result_len,
            sortedby=[sorting_timestamp, scores],
            reverse=True,
            terms=True
        )
        if results.scored_length() > 0:
            for hit in results:
                search_results.append(append_to(hit))
            return (search_results, results.pagecount)

    parser = qparser.MultifieldParser(
            [FIELD_TITLE, FIELD_PUBLISHER, FIELD_TOPIC],
            ix.schema, termclass=FuzzyTerm)
    parser.add_plugin(qparser.FuzzyTermPlugin())
    query = parser.parse(search_term)
    query.normalize()
    search_results = []
    with ix.searcher() as searcher:
        results = searcher.search_page(
            query,
            pagenum=page,
            pagelen=result_len,
            sortedby=[sorting_timestamp, scores],
            reverse=True,
            terms=True
        )
        if results.scored_length() > 0:
            for hit in results:
                search_results.append(append_to(hit))
            return (search_results, results.pagecount)
    return None, 0

当我尝试标题搜索时,搜索工作正常,但对于作者和关键字,搜索不工作。我无法理解我在这里做错了什么。我从 api 获取数据,然后运行索引。一切正常。但是当我搜索 authorskeywords 这样的关键字时,它不起作用。

【问题讨论】:

  • 请举例说明您在作者中存储的内容以及您搜索的内容。

标签: python python-2.7 search whoosh


【解决方案1】:

authorskeywords 都属于 KEYWORD 类型,不支持词组搜索,这意味着您应该使用确切的关键字或其派生词之一进行搜索,因为您使用的是词干分析器。

对于authors,我认为你应该使用TEXT

来自 whoosh 文档

whoosh.fields.KEYWORD

此类型专为空格或逗号分隔的关键字而设计。这 类型是索引和可搜索的(并且可以选择存储)。为了节省空间, 不支持词组搜索

【讨论】:

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