2016-01-02 4 views
0

Раскрытие: Я новичок в Android, так что после прочтения советов и все, я я разместить этот вопрос разумно. Простите, если я где-то ошибаюсь. Я видел много сообщений из SO и многих других блогов, но кроме теорий, Я не получаю никакого конкретного решения для своего кода.поиск Proximity с Lucene Android

Я делаю проект, где моя задача - создать рабочий проект lucene для поиска данных из json-файла.

Теперь, что мне нужно сделать точно, когда пользователь вводит что-то в searchView, пользователь должен получить listview, зависящий от введенного текста, с примером поиска PROXIMITY.

То, что я пытался до сих пор есть,

Analyzer analyzer = null; 
     QueryParser queryParser = new QueryParser(string_searchText, analyzer); 
     try { 
      Query query = queryParser.parse("\"how today\"~10"); 

      Toast.makeText(getApplicationContext(), query.toString(), 
        Toast.LENGTH_LONG).show(); 

      Log.v("..query..", query.toString()); 

     } catch (org.apache.lucene.queryparser.classic.ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Здесь string_searchText является то, что пользователь вводит в SearchView, и этот текст хранится в этой строке, так что может быть 5-10 слов, так что теперь я имеют эту логику для двух слов ..

Я хочу иметь логику для большего количества слов, так что мне делать?

или

я должен работать только с 2-мя словами близости?

Но я получаю ниже ошибки ..

01-03 00:53:21.073: D/AbsListView(26352): onVisibilityChanged() is called, visibility : 4 
01-03 00:53:21.073: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:21.103: D/AbsListView(26352): Get MotionRecognitionManager 
01-03 00:53:21.133: D/AbsListView(26352): onVisibilityChanged() is called, visibility : 4 
01-03 00:53:21.133: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:21.143: D/AbsListView(26352): onVisibilityChanged() is called, visibility : 0 
01-03 00:53:21.143: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:21.193: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:21.303: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:21.313: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:22.524: D/WritingBuddyImpl(26352): getCurrentWritingBuddyView() 
01-03 00:53:22.694: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:24.456: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:24.646: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:25.227: D/AbsListView(26352): onVisibilityChanged() is called, visibility : 0 
01-03 00:53:25.227: D/AbsListView(26352): unregisterIRListener() is called 
01-03 00:53:25.397: D/AndroidRuntime(26352): Shutting down VM 
01-03 00:53:25.397: W/dalvikvm(26352): threadid=1: thread exiting with uncaught exception (group=0x40e23930) 
01-03 00:53:25.417: E/AndroidRuntime(26352): FATAL EXCEPTION: main 
01-03 00:53:25.417: E/AndroidRuntime(26352): java.lang.NullPointerException 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.util.QueryBuilder.createFieldQuery(QueryBuilder.java:205) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParserBase.newFieldQuery(QueryParserBase.java:480) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParserBase.getFieldQuery(QueryParserBase.java:472) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParserBase.getFieldQuery(QueryParserBase.java:494) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParserBase.handleQuotedTerm(QueryParserBase.java:887) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.java:452) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:247) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:171) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:160) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:118) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at com.abc.luceneprac.FAQs$ResultAdapter.getView(FAQs.java:574) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.AbsListView.obtainView(AbsListView.java:2604) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.ListView.makeAndAddView(ListView.java:1840) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.ListView.fillDown(ListView.java:681) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.ListView.fillFromTop(ListView.java:742) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.ListView.layoutChildren(ListView.java:1647) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.AbsListView.onLayout(AbsListView.java:2427) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.View.layout(View.java:14905) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewGroup.layout(ViewGroup.java:4601) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.View.layout(View.java:14905) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewGroup.layout(ViewGroup.java:4601) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.View.layout(View.java:14905) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewGroup.layout(ViewGroup.java:4601) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1694) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1552) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.LinearLayout.onLayout(LinearLayout.java:1465) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.View.layout(View.java:14905) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewGroup.layout(ViewGroup.java:4601) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.View.layout(View.java:14905) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewGroup.layout(ViewGroup.java:4601) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2213) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2027) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1237) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5164) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.Choreographer.doCallbacks(Choreographer.java:591) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.Choreographer.doFrame(Choreographer.java:561) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.os.Handler.handleCallback(Handler.java:725) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.os.Looper.loop(Looper.java:176) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at android.app.ActivityThread.main(ActivityThread.java:5302) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at java.lang.reflect.Method.invokeNative(Native Method) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at java.lang.reflect.Method.invoke(Method.java:511) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
01-03 00:53:25.417: E/AndroidRuntime(26352): at dalvik.system.NativeStart.main(Native Method) 

И в моем проекте линия пятьсот семьдесят четвёртой,

это: Query query = queryParser.parse("\"how today\"~10");

Итак, как можно достичь желаемых результатов.

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

Спасибо.

Update--

Что об этом? Могу ли я использовать это?

\b(?:word1(?:\W+\w+){1,3}?\W+word2|word2(?:\W+\w+){1,3}?\W+word1)\b 

??

ответ

0

null не является приемлемым значением для анализатора, переданного в конструктор QueryParser. Вы должны использовать фактический анализатор.

Кроме того, первый аргумент конструктора QueryParser не является запросом, это имя поля по умолчанию для парсера. Запрос передается в методе parse.

+0

Спасибо, @femtoRgon, позвольте мне попробовать. –

+0

Я все еще пытаюсь, но как я могу применить близость более чем для двух слов? –

+0

\ b (?: Word1 (?: \ W + \ w +) {1,3}? \ W + word2 | word2 (?: \ W + \ w +) {1,3}? \ W + word1) \ b есть любая проблема в этом синтаксисе? Могу ли я использовать это? –

Смежные вопросы