сравнение индексов строки в java

#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 в качестве параметра и объединить результат, пожалуйста, не стесняйтесь изменять коэффициент в соответствии с вашими потребностями. Приветствия!