Вы можете использовать WildCardQuery , но если термин с подстановочным знаком начинается с символа подстановки (* или?), Он будет очень медленным, если в этом поле будет много разных терминов.
Вот небольшой пример, демонстрирующий, как написать WildcardQuery.Он использует устаревшие вещи и должен быть изменен для использования неосмотрительных перегрузок, но вы должны понять.
Для объединения с другими запросами вы можете использовать класс BooleanQuery
, который позволяет объединять несколько запросоввместе.
RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new StandardAnalyzer());
Document doc = new Document();
doc.Add(new Field("test", "AA-883 98/67", Field.Store.YES, Field.Index.NOT_ANALYZED));
iw.AddDocument(doc);
iw.Commit();
IndexSearcher searcher = new IndexSearcher(iw.GetReader());
WildcardQuery query = new WildcardQuery(new Term("test", "*883*"));
Hits hits = searcher.Search(query);
Console.WriteLine(hits.Length());
// prints 1
query = new WildcardQuery(new Term("test", "*98/67*"));
hits = searcher.Search(query);
Console.WriteLine(hits.Length());
// prints 1
query = new WildcardQuery(new Term("test", "*AA-883*"));
hits = searcher.Search(query);
Console.WriteLine(hits.Length());
// prints 1
query = new WildcardQuery(new Term("test", "*883 98*"));
hits = searcher.Search(query);
Console.WriteLine(hits.Length());
// prints 1
Console.ReadLine();
iw.Close();
dir.Close();