Как выполнить поиск по индексу Lucene, чтобы получить только те документы, в которых поле «узоры» содержит: слово «C» не менее 4 раз, И термин «CN» не менее 4 раз, И слово «N»по крайней мере, 2 раза?
Вот что я делаю:
Я постепенно начинаю осваивать Lucene, но впереди еще долгий путь.Я использую его для идеи химического поиска, где такое соединение, как вода (H2O), переводится в «документ», содержащий шаблоны «OHH OH OH», а метанол (CH3OH) переводится в шаблоны «CHHHOH CH CH CH CO OH».".
(Фактический код не содержит водородов и использует подструктуры вплоть до размера 7. В среднем документе содержится несколько тысяч" слов ", который содержит много повторов. Я исследую, полезен ли этот подход.)
Я создал индекс, используя что-то вроде (это через интерфейс с пилюценом):
dirname = SimpleFSDirectory(File(indexDir))
analyzer = WhitespaceAnalyzer(Version.LUCENE_30)
writer = IndexWriter(dirname, analyzer, True, IndexWriter.MaxFieldLength.UNLIMITED)
for compound_id, patterns in process_molecules(input_molecules):
doc = Document()
doc.add(Field("compound_id", compound_id, Field.Store.YES, Field.Index.ANALYZED))
f = Field("patterns", patterns, Field.Store.YES, Field.Index.ANALYZED)
f.setOmitNorms(True)
doc.add(f)
writer.addDocument(doc)
writer.optimize()
writer.close()
Я использую только WhitespaceAnalyzer, так как я не хочу никакой основы.Я использую OmitNorms (), так как я не хочу никакой нормализации длины термина.(Должен ли я делать что-то еще?)
Код поиска сходства дает результаты, которые выглядят хорошо, хотя мне понадобится еще несколько тестов.
Я также хочу использовать индекс для "подструктуры"поиск «.То есть, если кто-то набросает химическую субструктуру с 6 атомами в кольце (4 атома углерода и 2 атома азота), то я хочу дать им все структуры, которые содержат это кольцо в качестве субструктуры.
В сложном случае, это требует поиска изоморфизма подграфа.Я могу отклонить очевидные несоответствия, преобразовав это в случай текстового поиска.Документ образца для этого кольца - «CCNCCN CN CC CN CN CN CN».Все соединения, которые содержат эту кольцевую подструктуру, должны иметь соответствующий шаблон документа, по крайней мере, с 4 "C", 2 "N", 4 "CN" и 2 "CC".Поэтому я могу заменить некоторые из моих дорогих поисковых кодов изоморфизма подграфов фильтром, основанным на частотах шаблонов.
Проблема в том, что я не знаю, как задать этот частотный запрос.