問題タブ [query-parser]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lucene - Lucene MultiFieldQueryParser とハイライター
さまざまなフィールドを通じて lucene インデックスの記事をインデックスしてtitle
いdescription
ますlink
。publishDate
次のようにMultiFieldQueryParserを使用してインデックスをクエリします
そして、記事を検索結果として表示します。これまでのところ、すべてが良好です。ここで、タイトル、説明の検索テキストを強調表示したいと思います
これについてどうすればいいですか?通常のハイライターでは、フラグメントの生成中にNullPointerExceptionが発生します。そしてPostingHighlighterは、フィールドに従ってグループ化された結果を私に与えMap
ます..しかし、私はそのようにしたくありません。タイトルと説明の検索テキストの強調表示と一緒に返されるドキュメント全体でした。
ヘルプ、提案、またはコード スニペットをいただければ幸いです。
lucene - 複数のフィールドを持つ Lucene Queryparser
私は Lucene 5.3 を使用し、queryparser-syntax を使用して複数のフィールドを検索しようとしています。Lucene チュートリアル内で短い例を見つけて、それをバージョン 5.3 に変更し、それらのフィールドを検索しました。
クエリパーサーは「title:part」に対して機能しており、「part」を含むすべてのドキュメントを取得しますが、「title:(part) AND course_code:(3437RJ1)」または「title:(part) OR course_code:(3436NRX)」を使用すると、 ) 結果は 0 です。検索のどこが間違っていますか?
lucene - Lucene NOT_ANALYZED が大文字で機能しない
StandardAnalyzer を使用してインデックスを作成しました。このインデックスにはいくつかのフィールドがあります。例として、ID と Type があるとします。どちらも NON_ANALYZED です。つまり、そのまま検索することしかできません。
私のインデックスにはいくつかのエントリがあります:
+Id:1
またはその他の数値を検索すると、適切な結果が得られます (再び StandardAnalyzer を使用)。
ただし、+Type:Location
またはを検索し+Type:Group
ても、結果が得られません。奇妙なことに、先頭のワイルドカードを有効にすると、+Type:*ocation
結果が返されます! +Type:*Location
または他の組み合わせはしません。
これにより、インデクサー/クエリが大文字を好まないと信じるようになりました! Type を小文字に変換した後、location
インデックスgroup
を作成する前に、そのように検索できました。
Type-field を ANALYZED にすると、ほぼすべての検索 (大文字/小文字など) で機能しますが、Type-field をそのまま照会したいと考えています。
なぜこれをしているのか、私は完全に困惑しています。インデクサーで、値に大文字が含まれる NON_ANALYZED フィールドを検索できない理由を誰か説明してもらえますか?
java - Luceneで特定の範囲の単語を検索する方法
にある用語を検索したいのですが[0, 10]
、用語は整数として保存されているフィールド「CityId」からのものです。私が書いたことは以下のとおりです。
java - クエリの解析中に Lucene エラー: 解析できません '': 検出されました "" 行 1、列 0
Lucene クエリ パーサーを使用してテキストを解析し、テキストに対して基本的なテキスト前処理を実行したいと考えています。次のコード行を使用しました。
しかし、私はエラーが発生しています:
solr - コンテキストを使用した Solr/Lucene クエリのレンマタイゼーション
Lucene のチェコ語レンマタイザーの実装に成功しました。私はSolrでテストしていますが、インデックス時にうまく機能します。ただし、クエリ パーサーはレンマタイザーにコンテキスト (前後の単語) を提供しないため、クエリに使用するとうまく機能しません。
たとえば、フレーズpila vodu
は、クエリ時とインデックス時では異なる方法で分析されます。それはあいまいな単語を使用しており、これは (saw eg chainsaw) または(動詞の「飲む」の過去形)pila
を意味する可能性があります。pila
pít
pila vodu
->
- インデックス時間:
pít voda
- クエリ時間:
pila voda
..そのため、単語pila
が見つからず、ドキュメント スニペットで強調表示されません。
この動作はsolr wiki (以下に引用) で文書化されており、コードをデバッグすることで確認できます (分離された文字列 "pila" と "vodu" のみがレンマタイザーに渡されます)。
... Lucene QueryParser は、Analyzer にテキストを渡す前に空白をトークン化するため、ユーザーが単語を検索すると
sea biscit
、アナライザーには「sea」と「biscit」という単語が別々に与えられます...
だから私の質問は:
レンマタイザーがクエリ文字列全体、または少なくとも個々の単語の一部のコンテキストを見るように、クエリパーサーを何らかの方法で変更、構成、または適応させることは可能ですか? dismaxやedismaxなどのさまざまな solr クエリ パーサーのソリューションも提供したいと考えています。
(quotes) のようなフレーズ クエリにはそのような問題がないことはわかってい"pila vodu"
ますが、正確なフレーズのないドキュメントは失われます (たとえば、"pila víno"や"pila dobrou vodu"を含むドキュメント)。
編集-次の質問を説明/回答しようとしています(@femtoRgonに感謝します):
2 つの用語が句ではなく、必ずしも一緒になるとは限らない場合、なぜそれらは相互の文脈で分析されるのでしょうか?
確かに、一緒に来る用語だけを分析する方が良いでしょう. たとえば、インデックス作成時に、レンマタイザーは入力テキスト内の文を検出し、1 つの文の単語のみを一緒に分析します。しかし、クエリ時に同様のことを達成するにはどうすればよいでしょうか? 独自のクエリ パーサーを実装することが唯一の選択肢ですか? pf2
パーサーのオプションとpf3
オプションがとても気に入っていますedismax
。自分のパーサーの場合、それらを再度実装する必要がありますか?
レンマタイザーは、同じ語彙ベースを持つ単語であっても単語の意味の曖昧さを解消するため、背後にある考え方は実際にはもう少し深いものです。たとえば、単語bow
には英語で約 7 つの異なる意味があり ( wikipediaを参照)、レンマタイザーはそのような意味を区別しています。したがって、この可能性を利用して、検索をより正確に行いbow
、クエリで必要な具体的な意味で単語を含むドキュメントのみを返したいと考えています。したがって、私の質問は次のように拡張でき<lemma;sense>
ます。クエリ用語の正しいペアを取得するにはどうすればよいですか? 単語が共通の文脈で提示されている場合、レンマタイザーは正しい意味を割り当てることができることが非常に多いですが、文脈がない場合はチャンスがありません。
java - すべてのLucene Javaを選択するクエリ
Lucene でクエリを実行しようとしていますが、タイトルが "@" 文字で始まるドキュメントを選択したいと考えています。ドキュメントを見ましたが、結果はゼロ要素です。これがコードと結果です。ご協力いただきありがとうございます。
これはコードです:
これが出力です