如何使用whoosh搜索关键字

如何使用whoosh搜索关键字

问题描述:

文章架构:如何使用whoosh搜索关键字

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

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搜索时,它不起作用。

+0

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

两个authorskeywordsKEYWORD类型不支持词组搜索这意味着你应该用准确的关键字或其衍生物之一,因为你使用的是词干搜索的。我想你应该使用TEXT

从嗖文档

whoosh.fields.KEYWORD

这种类型被设计用于空间 - 或逗号分隔的关键字。这个 类型被索引和搜索(和可选地存储)。为了节省空间, 它不支持短语搜索