Portál AbcLinuxu, 30. prosince 2025 07:35
Svátky pomalu končí a tak mám pro vás poslední novinku pro tento týden. A tou je předělání vyhledávání - hezčí vzhled i ukázka nalezených dokumentů.
Po menších peripetiích jsem si stáhnul verzi modulu highlight, která je kompatibilní s verzi Lucene, kterou používám. Kupodivu to nebylo moc složité a máme zvýrazňování, tak jak jej znáte z googlu a spol. Přitom jsem předělal i vizuální podobu výsledků, aspoň mě to teď přijde hezčí. On si s tím určitě Robert pohraje.
Odstranil jsem skóre, které spíše mátlo než pomáhalo. Také jsem zmenšil počet výsledků na stránce, vlastní hodnotu si můžete nastavit v profilu. Já si ji zmenším.
Začal jsem indexovat datum vytvoření a poslední změny u všech objektů, zatím se mi ale nedaří podle nich hledat. Lépe jsem dopadl s tím, zda je diskuse vyřešena (vyreseno:ano/ne) a počtu odpovědí (odpovedi:cislo). Začal jsem psát i nápovědu, časem do ni přidám všechny informace.
Teď se zrovna reindexuje databáze, změny byly nekompatibilní a tak teď hledání padá. Ale za deset minut si můžete hrát. Později přidám do výpisu více informací, hlavně datum vytvoření a/nebo poslední změny, u diskusí pak hodnoty zmíněných políček. Kousek kódu pro programátory, sám jsem něco podobného ráno potřeboval, protože ukázka v dokumentaci modulu highlight není úplná.
AbcCzechAnalyzer analyzer = new AbcCzechAnalyzer();
Query query = AbcQueryParser.parse(queryString, analyzer, types, newsCategories);
IndexReader indexReader = IndexReader.open(CreateIndex.getIndexPath());
query = query.rewrite(indexReader);
Searcher searcher = new IndexSearcher(indexReader);
Hits hits = searcher.search(query);
int total = hits.length();
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter(
"<span class=\"highlight\">", "</span>");
Highlighter highlighter = new Highlighter(formatter, new QueryScorer(query));
for ( int i=from,j=0; i<total && j<count; i++, j++ ) {
Document doc = hits.doc(i);
float score = (hits.score(i)>0.01) ? hits.score(i) : 0.01f;
doc.add(Field.UnIndexed("score", percentFormat.format(score)));
String text = hits.doc(i).get(MyDocument.CONTENT);
TokenStream tokenStream = analyzer.tokenStream(MyDocument.CONTENT,
new StringReader(text));
String result = highlighter.getBestFragments(tokenStream, text, 3, "...");
doc.add(Field.UnIndexed("fragments", result));
list.add(doc);
}
Tiskni
Sdílej:
PS: Umístění by mohlo být vlevo jak bývalo. Teď mi to příjde takové nepřehledné, když je to až za názvem článku(diskuse).
nvidia vytvoreno:[1.7.2005 TO 7.7.2005]
najde vsechno, co bylo vytvoreno v danem casovem useku a obsahuje slovo nvidia. U diskusi je lepsi pouzit policko zmeneno (pozor - je to datum posledni zmeny, ne ze v danem case se neco zmenilo).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.