#java #lucene
#java #lucene
Вопрос:
Я пытаюсь сравнить 2 индекса строки. В принципе, если первый индекс строки не равен второму индексу, создайте новый searchIndex()
метод в void main
.
Это означает, что если пользователь вводит запрос в поисковой системе из 2 слов, результаты должны показывать совпадающие текстовые файлы для первого слова и совпадающие текстовые файлы для второго слова, а не показывать общее количество совпадений и смешивать текстовые файлы друг с другом, не зная, какое слово связанок какому текстовому файлу.
Если я ввел Japan
в текстовое поле
Вывод:
Searching for 'Japan '
3
Fileswhalehunt.txt
Filesjapan.txt
Filesinnovation.txt
Но если я ввел 2 слова:
Вывод:
Searching for 'Japan amazon '
5
Fileswhalehunt.txt
Filesjapan.txt
Filesperu.txt
Filescorrespondent.txt
Filesinnovation.txt
В случае 2 слов пользователь не знает, какое слово для какого файла. Все перепутано. То, что я пытаюсь сделать, это сравнить индексы строки запроса, чтобы они совпадали, совпадают ли два слова или нет. Если нет, он должен добавить новый searchIndex()
метод void main
и назначить ему второе слово.
Так что вместо этого:
public static void main(String[] args) throws Exception {
createIndex();
searchIndex("Japan amazon ");
}
Сделайте это:
public static void main(String[] args) throws Exception {
createIndex();
searchIndex("Japan ");
searchIndex("amazon");
}
То, что я пробовал, это:
public static void searchIndex(String searchString) throws IOException, ParseException {
for(int n=0;n<=1000;n )
{
if (searchString.substring(0) != searchString.substring(1))
{
void main.searchIndex(searchString.); //**Error**
}
}
Любая помощь была бы признательна!!
С уважением.
Ответ №1:
Ваш метод serachIndex() совершенно неверен, ИМХО. Вы сравниваете индексы 0 и 1 строки 1000 раз. Почему вы не используете tokenizer или String.split() для создания отдельных слов из вашей строки? Что-то вроде этого:
public static void searchIndex(String searchString) throws IOException, ParseException {
searchString = searchString.trim();
if (searchString.length < 1)
return;
String[] words = searchString.split(" ");
if (words.length > 1) {
for (String word : words)
searchIndex(word);
} else {
// Do normal stuff here
}
}
Кстати, я предполагаю, что вы знаете о таких инструментах, как Apache Lucene, и алгоритмах, таких как MapReduce.
Комментарии:
1. это сработало, оно разделяет 2 слова и показывает результаты, но также показывает старый результат, который объединен с amazon вместе
Ответ №2:
Вы можете использовать итератор прерывания или использовать более простой токенизатор строк
public static void breakSentenceIntoWords(String source) {
BreakIterator boundary = BreakIterator.getWordInstance();
boundary.setText(source);
int start = boundary.first();
for (int end = boundary.next();
end != BreakIterator.DONE;
start = end, end = boundary.next()) {
String newWordToSearch = source.substring(start 1,end);
// perform search and other ops here
}
}
Комментарии:
1. спасибо за ваш ответ, куда мне поместить код, который вы предоставили в моем коде?
2. можете ли вы вызвать SearchIndex(), где я упомянул, с newWordToSearch в качестве параметра и объединить результат, пожалуйста, не стесняйтесь изменять коэффициент в соответствии с вашими потребностями. Приветствия!