当前位置: 首页 > 工具软件 > CLucene > 使用案例 >

clucene中字段Field属性解析

宋臻
2023-12-01

一, 是否存储(Stored)

是:将field域中的内容存储到文档域中。存储的目的,就是为了搜索页面显示取值用的。 STORE_YES

比如:商品名称、商品价格、商品id、商品图片地址

否:不将field域中的内容存储到文档域中。不存储,则搜索页面中没法获取该field域的值。 STORE_NO

比如:商品描述,由于商品描述在搜索页面中不需要显示,再加上商品描述的内容比较多,所以就不需要进行存储0

二 

是否索引(Indexed)

是:将分好的词进行索引,索引的目的,就是为了搜索。  INDEX_TOKENIZED

比如:商品名称、商品描述、商品价格、商品id

否:不索引,也就是不对该field域进行搜索。  INDEX_NO

三 是否保存保存词向量

是: 词的向量数据保存  TERMVECTOR_YES

否:不保存  TERMVECTOR_NO

 

以上信息在类Field中体现

下面是建立索引和搜索的例子

lucene::analysis::standard::StandardAnalyzer an;
    // 其中target是要建立的索引名
    char* target = "E:\\clucene-core-2.3.3.4\\testindex";
    IndexWriter*  writer = new IndexWriter(target ,&an, true);

    Document* doc = new Document();

    int flags = lucene::document::Field::STORE_YES
        | lucene::document::Field::INDEX_TOKENIZED;

    doc->add(*(new Field(_T("author"), _T("abc"), flags)));

    writer->addDocument(doc );

    writer->close();

    getchar();
    
    IndexSearcher s(target);
    standard::StandardAnalyzer analyzer;
    Query* query = QueryParser::parse(_T("abc"), _T("author"), &analyzer);

    // 返回匹配的结果集
    Hits* h = s.search(query);
    // 遍历结果集
    for ( int32_t i=0;i<h->length();i++ )
    {
        //  毎一条结果都是一个Document对象,引用也很方便
        Document* doc = &h->doc(i);

        // 结果是根据匹配度排序的:
        float fScroe = h->score(i);
    }

 类似资料: