Re: Synonyms
Андрей
sc_93 at list.ru
Thu Sep 11 07:53:12 BST 2025
Thanks for the quick reply! I really appreciate your help but still no luck with synonums. The goal is to get some results from database providing synonum to query not origin word.
Full code example:
#pragma warning(disable : 4996)
#include <iostream>
#include "xapian.h"
int main()
{
Xapian::WritableDatabase db("./index_data_test", Xapian::DB_CREATE_OR_OPEN);
//db.add_synonym("time", "clock");
db.add_synonym("ягода", "арбуз");
Xapian::TermGenerator indexer;
indexer.set_database(db);
indexer.set_flags(indexer.FLAG_SPELLING);
//Xapian::Stem stemmer("ru"); //no effect
//indexer.set_stemmer(stemmer);
//std::string content = "Old clock";
std::string content = "спелый арбуз";
Xapian::Document doc1;
doc1.set_data(content);
indexer.set_document(doc1);
indexer.index_text(content);
db.add_document(doc1);
db.commit();
db.close();
Xapian::Database db1("./index_data_test");
//std::string word = "time";
std::string word = "ягода";
for (auto t = db1.synonyms_begin(word); t != db1.synonyms_end(word); t++)
{
std::cout << "A synonym for " << word << " is " << *t << "\n";
}
std::cout << db1.get_description() << " " << db1.get_doccount() << std::endl;
Xapian::Enquire enquire(db1);
Xapian::QueryParser qp;
//qp.set_stemmer(stemmer);
qp.set_database(db1);
//qp.set_stemming_strategy(qp.STEM_ALL);
Xapian::Query query = qp.parse_query("~" + word, Xapian::QueryParser::FLAG_DEFAULT | Xapian::QueryParser::FLAG_SYNONYM); // no result without "~". FLAG_AUTO_SYNONYMS is the way to avoid "~"
enquire.set_query(query);
Xapian::MSet matches = enquire.get_mset(0, db1.get_doccount());
std::cout << matches.get_matches_estimated() << std::endl;
std::cout << matches.size() << std::endl;
db1.close();
}
- If I use Russain there are no matches in database:
A synonym for ягода is арбуз
Database() 1
0
0
- If I use English the output results are:
A synonym for time is clock
Database() 1
1
1
Am I indexing wrong way?
Or it is need to put some extra flags while building? Using:
./configure CC="cl -nologo" CXX="D:/_CPP/xapian-core-1.4.29/compile cl -nologo" CXXFLAGS="-EHsc -Zi" AR=lib CPPFLAGS="-I/D/_CPP/_Lib/zlib/include" LDFLAGS="-L/D/_CPP/_Lib/zlib/lib" --prefix="D:/x"
-----
Андрей
More information about the Xapian-discuss
mailing list