Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > как в lucene определить есть ли уже значение


Автор: DooZ 3.11.2009, 12:41
Здравствуйте,

Подскажите, как в lucene определить есть ли уже значение в базе или нет (нужно что бы в ней были только уникальные значения)

т.е. я добавляю значение так:

код c# т.к. программа написана на нем

Код

IndexWriter writer = new IndexWriter(BaseLocation, new StandardAnalyzer(), false);
Document doc = new Document();
doc.Add(new Field("content", 'тут значение', Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);
writer.Close();


а вот как определить, есть ли уже в базе это значение или нет?
другими словами, мне нужны только уникальные значения в базе

сорри если разделом ошибся, но в разделе по c# мало посещений, да и вопрос касается lucene, а не языка (на языке просто пример привел)
если что сможет написать ответ на другом языке, то тоже пойдет, мне главное выяснить, есть такие функции у lucene определения элемента в базе

Автор: DimW 3.11.2009, 13:11
Цитата(DooZ @  3.11.2009,  12:41 Найти цитируемый пост)
нужно что бы в ней были только уникальные значения)

повесте на поле таблицы unique constraint.

Цитата(DooZ @  3.11.2009,  12:41 Найти цитируемый пост)
да и вопрос касается lucene

это оно? http://ru.wikipedia.org/wiki/Lucene

Добавлено через 6 минут и 46 секунд
наверное всевтаки это - http://incubator.apache.org/lucene.net/ ...

Автор: DooZ 3.11.2009, 13:23
2DimW угу она самая, только я не нашел где можно повесить unique constraint (точнее как)...
уже просто устал с ней и так и сяк :-( видимо усталость сказывается, буду примного благодарен если ткнете носом smile (зы. документацию на сайте уже всю проштудировал (за ночь) :-( не помогло)

Автор: DimW 3.11.2009, 13:34
DooZ, вы с SQL дружите или изабилие фраймворков помутило вам разум  smile 

Код

alter table TABLE_XXX
  add constraint UK_NAME unique (content);



Автор: DooZ 3.11.2009, 13:38
может я ошибаюсь, но в lucene нет sql запросов...

Автор: DimW 3.11.2009, 13:41
Цитата(DooZ @  3.11.2009,  13:38 Найти цитируемый пост)
но в lucene нет sql запросов

скорее так и есть, но вы же на уровень БД спуститься можете?!
СУБД какую используете?

Автор: DooZ 3.11.2009, 13:45
дык в том-то и дело что использую lucene для хранения строк
я ее использую для последующего быстрого поиска нужной строки (вхождения определенного слова в строку)

тобишь другими словами сторонние БД юзать низя, только чистую lucene вот и нужно разобраться как там хранить только уникальные элементы

Добавлено через 4 минуты и 16 секунд
пробывал на SQLite и Mysql
но добавление новых строк в базу очень долго
а так же поиск по ним тоже долгин

в таблице всего одно поле
string varchar(255) и уникальность по нему

в базе 5 миллионов записей
добавление в нее еще записей достаточно медленно
поиск по
like '%строка%' очень долгий
regexp 'строка' чуть быстрее, но все равно долго
если ставить fulltext index на поле string то добавление в базу новых элементов замедляется еще сильнее =(

вот и ищу альтернативные пути как мне хранить огромный список слов, по которым потом поиск осуществлять очень и очень быстро...

в базе планируется порядка 100.000.000 записей, так что думаю mysql и sqlite сразу отпадут =(

Автор: DimW 3.11.2009, 14:02
Цитата(DooZ @  3.11.2009,  13:45 Найти цитируемый пост)
тобишь другими словами сторонние БД юзать низя, только чистую lucene 
  smile 
не думал что все так серьезно, думал это просто библиотека для поиска по БД - по крайней мере в все что понял из википедии  smile 

вот что то похоже на создание уникального индыкса (могу ошибаться)
Цитата

Creating a Lucene Index
The example file MakeIndex.java in the directory "simple_example" shows the few lines of code required to create a new Lucene index. This demo program reads all test files in the directory "example_text_files" and adds them to the index. The following few lines of code in the example program use the Lucene class libraries. 

Create a Lucene IndexWriter instance: 

IndexWriter indexWriter = new IndexWriter("index", new StandardAnalyzer(), true);

This creates the index in the directory "index". The standard analyzer tokenizes text and discards some common noise words. The third argument is a flag to indicate that Lucene should delete any existing indices in the "index" directory. You would set this flag to false if you wanted to add to an existing index. 

Create a new Document instance and add it to the index: 

Document document = new Document();
document.add(Field.Text("text", new FileReader(fullPath)));
document.add(Field.UnIndexed("filepath", fullPath));
indexWriter.addDocument(document);


источник - http://www.devx.com/Java/Article/27728/1954

Автор: DooZ 3.11.2009, 14:09
не, это я видел
это просто выделяешь какие поля индексировать какие нет, в данном случае поле filepath не индексируется

ждем, может еще кто подключится с помощью smile
тем немения DimW спасибо за участие

Автор: DimW 3.11.2009, 14:18
Цитата(DooZ @  3.11.2009,  14:09 Найти цитируемый пост)
 в данном случае поле filepath не индексируется

а я подумал что UnIndexed от сокращенного UniqueIndexed  smile 

Цитата(DooZ @  3.11.2009,  14:09 Найти цитируемый пост)
ждем, может еще кто подключиться с помощью

вряд ли, вашу тему скорей всего перенесут туда где на SQL не принято писать...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)