
136
|
Chapter 3, Tables and Trees
#26 Search Through JTables Easily
HACK
First, add a field with the row index in the inner table model. You’ll use this
to link back to that row later in the row-to-model index. Each field needs a
name and a value, so create a constant called
ROW_NUMBER
that you’ll refer to
later when retrieving the links:
Document document = new Document( );
document.add(new Field(ROW_NUMBER, "" + row, true, true, true));
//more indexing to come
writer.addDocument(document);
Then, iterate through all of the columns and add a Field for each column
name/value pair:
for (int column=0; column < tableModel.getColumnCount( ); column++){
String columnName = tableModel.getColumnName(column);
String columnValue = String.valueOf(
tableModel.getValueAt(row, column)
).toLowerCase( );
document.add(new Field(columnName, columnValue, true, true, true));
}
Searching
There are two parts to the searching. First, you have to hit the Lucene index
with a search string. This will give you a list of rows in the inner table model
that match the search. Then you need to reset the row-to-model index,
pointing to those rows.
Getting results from the index. To actually get the search results, you need an
IndexSearcher that speaks to the index and returns your search results:
IndexSearcher is = new IndexSearcher(directory);
You want to make sure all of the fields get searched, so iterate through the
table model and ...