簡體   English   中英

如何使用Whoosh搜索關鍵字

[英]How to use whoosh for searching keywords

文章架構:

以下是我創建的文章架構。

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之類的keywords它不起作用。

authorskeywords均為KEYWORD類型,不支持詞組搜索,這意味着您應使用精確的關鍵字或其衍生詞之一進行搜索,因為您使用的是詞干搜索器。

對於authors ,我認為您應該使用TEXT

從whoosh文檔

whoosh.fields.KEYWORD

此類型設計用於以空格或逗號分隔的關鍵字。 此類型是可索引和可​​搜索的(並且可以選擇存儲)。 為了節省空間, 它不支持詞組搜索

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM