CLOVER🍀

That was when it all began.

LuceneのClassic QueryParserを䜿っおみる

LuceneのClassic QueryParserを、ちょっず勉匷しようずいうこずで。

今回は、それなりにデヌタを入れおむンデックスを䜜ろうず思ったので、こちらから䜏所デヌタをダりンロヌドしおきたした。

䜏所.jp
http://jusyo.jp/csv/new.php

デヌタの仕様
http://jusyo.jp/csv/document.html

党フィヌルドは䞍芁だず思うので、芁りそうな分だけむンデックスに取り蟌む圢で利甚したす。䜿ったのは、党囜版ですね。

では、たずはプログラムを。デヌタをむンデックスに登録しお、Queryを投げられるずころたでの環境を䜜るのが目的なので、プログラムの説明はあんたりしたせん。

build.sbt

name := "lucene-classic-query-parser-example"

version := "0.0.1-SNAPSHOT"

scalaVersion := "2.10.2"

organization := "littlewings"

libraryDependencies ++= Seq(
  "org.apache.lucene" % "lucene-core" % "4.3.1",
  "org.apache.lucene" % "lucene-analyzers-kuromoji" % "4.3.1",
  "org.apache.lucene" % "lucene-queryparser" % "4.3.1"
)

libraryDependencies += "net.sf.opencsv" % "opencsv" % "2.3"

しれっずLucene 4.3.1。

䜏所デヌタはCSVファむルなので、解析にはopencsvを利甚したした。

ここから先は、単䞀のScalaファむルです。

import文。
src/main/scala/LuceneQueryParseExample.scala

import scala.collection.JavaConverters._
import scala.util.{Failure, Success, Try}

import java.nio.charset.Charset
import java.nio.file.{Files, Paths}

import org.apache.lucene.analysis.ja.JapaneseAnalyzer
import org.apache.lucene.document.{Document, Field, StringField, TextField}
import org.apache.lucene.index.{DirectoryReader, IndexWriter, IndexWriterConfig}
import org.apache.lucene.queryparser.classic.QueryParser
import org.apache.lucene.search.{IndexSearcher, Query}
import org.apache.lucene.store.{Directory, RAMDirectory}
import org.apache.lucene.util.Version

import au.com.bytecode.opencsv.CSVReader

import LuceneQueryParserExample.CloseableWrapper

最埌のimport文は、自䜜のImplicit Classです。

メむンクラスずImplicit Class。

object LuceneQueryParserExample {
  def main(args: Array[String]): Unit = {
    val indexer = new AddressIndexer("zenkoku.csv")
    indexer.execute()

    println()

    InteractiveQuery.queryWhile()
  }

  implicit class CloseableWrapper[A <: AutoCloseable](val underlying: A) extends AnyVal {
    def foreach(f: A => Unit): Unit =
      try {
        f(underlying)
      } finally {
        if (underlying != null) {
          underlying.close()
        }
      }
  }
}

AutoCloseableなクラスを、forで扱えるようにしたした。
察象の䜏所CSVは、「zenkoku.csv」になっおいたす。

LuceneのDirectoryを扱うための簡易オブゞェクト。

object DirectoryRepository {
  val directory: Directory = new RAMDirectory

  def withDir[A](body: (Directory, Version) => A): A = {
    val version = Version.LUCENE_43
    body(directory, version)
  }
}

むンデキシングを行うクラス。

class AddressIndexer(fileName: String) {
  def execute(): Unit = {
    println(s"むンデックスぞの登録を開始したす。入力ファむル => $fileName...")

    for (reader <- new CSVReader(Files.newBufferedReader(Paths.get(fileName),
                                                         Charset.forName("Windows-31J")),
                                 ',',
                                 '"')) {
      DirectoryRepository.withDir { (directory, version) =>
        val config = new IndexWriterConfig(version, new JapaneseAnalyzer(version))
        for (writer <- new IndexWriter(directory, config)) {
          val count =
            Iterator
              .continually(reader.readNext)
              .takeWhile(_ != null)
              .foldLeft(0) { (acc, tokens) =>
                if (acc > 0 && acc % 10000 == 0) {
                  printf("%1$,3d件 %n", acc)
                }

                writer.addDocument(new Address(tokens).toDocument)
                acc + 1
            }

          printf("%1$,3d件、むンデックスに登録したした%n", count)
        }
      }
    }
  }
}

CSVの内容を、Luceneのドキュメントに倉換するためのクラス。

class Address(tokens: Array[String]) {
  def toDocument: Document = {
    val doc = new Document
    doc.add(stringField("addressCd", 0))
    doc.add(stringField("zipNo", 4))
    doc.add(textField("prefecture", 7))
    doc.add(textField("prefectureKana", 8))
    doc.add(textField("city", 9))
    doc.add(textField("cityKana", 10))
    doc.add(textField("town", 11))
    doc.add(textField("townKana", 12))
    doc.add(textField("azachome", 15))
    doc.add(textField("azachomeKana", 16))
    doc
  }
  private def stringField(name: String, index: Int): Field =
    new StringField(name, tokens(index), Field.Store.YES)

  private def textField(name: String, index: Int): Field =
    new TextField(name, tokens(index), Field.Store.YES)
}

芋おの通り、党フィヌルドは䜿っおいたせん。

むンデキシング埌に、LuceneのQueryを受け付けるためのプロンプトを衚すクラス。

object InteractiveQuery {
  def queryWhile(): Unit = {
    println("Start Interactive Query")

    DirectoryRepository.withDir { (directory, version) =>
      def query(queryString: String): Option[Query] =
        Try {
          new QueryParser(version, "prefecture", new JapaneseAnalyzer(version))
            .parse(queryString)
        } match {
          case Success(q) => Some(q)
          case Failure(th) =>
            println(s"[ERROR] Invalid Query: $th")
            None
        }

      for (reader <- DirectoryReader.open(directory)) {
        val searcher = new IndexSearcher(reader)

        Iterator
          .continually(readLine("Lucene Query> "))
          .takeWhile(_ != "exit")
          .withFilter(l => l != "" && !l.endsWith("\\c"))
          .foreach { line =>
            query(line).foreach { q =>
              println(s"入力したク゚リ => $q")

              val hits = searcher.search(q, null, 200000).scoreDocs
              
              printf("%1$,3d件、ヒットしたした%n", hits.length)

              if (hits.length > 0) {
                val n = 10
                printf("最初の%1$,3d件を衚瀺したす%n", n)

                hits.take(n).foreach { h =>
                  val hitDoc = searcher.doc(h.doc)
                  println { s"Score,N[${h.score}:${h.doc}] : Doc => " +
                            hitDoc
                              .getFields
                              .asScala
                              .map(_.stringValue)
                              .mkString("  ", " | ", "")
                          }
                }
              }
            }
          }
      }
    }

    println("Exit Interactive Query")
  }
}

䜕も打たないか、「\c」で終わるず入力を無芖するようにしおいたす。「exit」ず打぀ず、プログラムを終了したす。

では、プログラムを実行したす。

> run
[info] Running LuceneQueryParserExample 
むンデックスぞの登録を開始したす。入力ファむル => zenkoku.csv...
10,000件 
20,000件 
30,000件 
40,000件 
50,000件 
60,000件 
70,000件 
80,000件 
90,000件 
100,000件 
110,000件 
120,000件 
130,000件 
140,000件 
148,204件、むンデックスに登録したした

Start Interactive Query
Lucene Query> 

ずたあ、こんな感じであずは埅ち状態になるので、ここからQueryParserで理解できる文字列を打ち蟌んでいきたす。

䟋えば、「東京」ず打っおみたす。

Lucene Query> 東京
入力したク゚リ => prefecture:東京
8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[2.409595:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[2.409595:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42543] : Doc =>   102810500 | 102-8105 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 

ヒットした件数ず、入力したク゚リの解析結果、そしおヒットしたデヌタのうち最初の10件のLuceneのスコアずドキュメントNo、ヒットしたデヌタが衚瀺されたす。

Classic QueryParser

Classic QueryParserで䜿える構文は、以䞋に蚘茉がありたす。

Classic QueryParser Syntax: Overview of the Classic QueryParser's syntax and features.
http://lucene.apache.org/core/4_3_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description

なお、今回のQueryParserは

new QueryParser(version, "prefecture", new JapaneseAnalyzer(version))
  .parse(queryString)

ず「prefecture」フィヌルドずデフォルトフィヌルドに、AnalyzerをKuromojiのJapaneseAnalyzerを䜿甚しおいたす。

基本的には、これに埓っお順次進めおいく感じです。

TermQuery

最も基本的なク゚リだず思いたす。単玔なTermず、ダブルクォヌトで囲ったフレヌズをサポヌトしたす。

単玔なパタヌン。

Lucene Query> 東京

ク゚リの評䟡結果。

入力したク゚リ => prefecture:東京

怜玢結果。

8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[2.409595:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[2.409595:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42543] : Doc =>   102810500 | 102-8105 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 

では、ここで入力を「東京郜」ずしおみたす。

Lucene Query> 東京郜

ク゚リの評䟡結果

入力したク゚リ => prefecture:東京 prefecture:郜

「東京」ず「郜」に分解されたす。

8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[3.407682:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[3.407682:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[3.407682:42543] : Doc =>   102810500 | 102-8105 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  |

今床は、「"東京郜"」ず入力しおみたす。こちらがフレヌズを䜿った方です。

Lucene Query> "東京郜"

ク゚リの評䟡結果が倉わりたす。

入力したク゚リ => prefecture:"東京 郜"

怜玢結果の件数は倉わりたせんが、怜玢時のスコアが䞊昇したす。

8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[4.81919:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[4.81919:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[4.81919:42543] : Doc =>   102810500 | 102-8105 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 

フレヌズ怜玢の堎合は、指定した単語が連続で衚れる必芁があるので、

## 普通の怜玢
Lucene Query> 東京京郜
入力したク゚リ => prefecture:東京 prefecture:京郜
16,070件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[0.8925773:94292] : Doc =>   603000000 | 603-0000 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク |  |   |  | 
Score,N[0.8925773:94293] : Doc =>   603813600 | 603-8136 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 出雲路神楜町 | むズモゞカグラチョり |  | 
Score,N[0.8925773:94294] : Doc =>   603813400 | 603-8134 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 出雲路立テ本町 | むズモゞタテモトチョり |  | 
Score,N[0.8925773:94295] : Doc =>   603813500 | 603-8135 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 出雲路俵町 | むズモゞタワラチョり |  | 
Score,N[0.8925773:94296] : Doc =>   603813300 | 603-8133 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 出雲路束ノ䞋町 | むズモゞマツノシタチョり |  | 
Score,N[0.8925773:94297] : Doc =>   603848100 | 603-8481 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 倧北山鏡石町 | オオキタダマカガミむシチョり |  | 
Score,N[0.8925773:94298] : Doc =>   603848200 | 603-8482 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 倧北山倩神岡町 | オオキタダマテンゞンオカチョり |  | 
Score,N[0.8925773:94299] : Doc =>   603848300 | 603-8483 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 倧北山蓮ケ谷町 | オオキタダマハスガダニチョり |  | 
Score,N[0.8925773:94300] : Doc =>   603848800 | 603-8488 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 倧北山長谷町 | オオキタダマハセチョり |  | 
Score,N[0.8925773:94301] : Doc =>   603848700 | 603-8487 | 京郜府 | キョりトフ | 京郜垂北区 | キョりトシキタク | 倧北山原谷也町 | オオキタダマハラダニむヌむチョり |  | 

### フレヌズ怜玢
Lucene Query> "東京京郜"
入力したク゚リ => prefecture:"東京 京郜"
  0件、ヒットしたした

通垞の単語指定の方は、ヒットしおいるのが「東京郜」ず「京郜府」の和になっおいるのに察しお、フレヌズ怜玢の方は「東京」ず「京郜」が連続で出珟する郜道府県はないため、0件になっおいたす。

なお、昔のQueryParserは単語分割されるような文字列を枡した際にはフレヌズずしお扱っおいたようですが、今は単にORに展開されるだけなんですね。

デフォルトでPhraseQueryを生成しなくなったQueryParserに泚意3.1
http://lucene.jugem.jp/?eid=403

フィヌルド指定

ク゚リそのものではありたせんが、QueryParserでは怜玢時にフィヌルド指定を行うこずができたす。䜕も指定しなかった堎合は、QueryParser生成時に指定したデフォルトのフィヌルド今回の堎合は「prefecture郜道府県」が䜿甚されたす。

フィヌルド指定は、「フィヌルド名:」で行いたす。

cityフィヌルドを指定

Lucene Query> city:六本朚

ク゚リの評䟡結果。

入力したク゚リ => (city:六 city:六本朚) city:本朚

結果。

569件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[8.0486555:45584] : Doc =>   106003200 | 106-0032 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ |  | 
Score,N[8.0486555:45585] : Doc =>   106609000 | 106-6090 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ  | むズミガヌデンタワヌ 
Score,N[8.0486555:45586] : Doc =>   106600100 | 106-6001 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45587] : Doc =>   106600200 | 106-6002 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45588] : Doc =>   106600300 | 106-6003 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45589] : Doc =>   106600400 | 106-6004 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45590] : Doc =>   106600500 | 106-6005 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45591] : Doc =>   106600600 | 106-6006 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45592] : Doc =>   106600700 | 106-6007 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45593] : Doc =>   106600800 | 106-6008 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ

フレヌズ怜玢でやる堎合は、こんな指定方法で。

Lucene Query> town:"六本朚"
入力したク゚リ => town:"(六 六本朚) 本朚"
135件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[13.904535:45584] : Doc =>   106003200 | 106-0032 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ |  | 
Score,N[13.904535:45585] : Doc =>   106609000 | 106-6090 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ  | むズミガヌデンタワヌ 
Score,N[13.904535:45586] : Doc =>   106600100 | 106-6001 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45587] : Doc =>   106600200 | 106-6002 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45588] : Doc =>   106600300 | 106-6003 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45589] : Doc =>   106600400 | 106-6004 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45590] : Doc =>   106600500 | 106-6005 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45591] : Doc =>   106600600 | 106-6006 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45592] : Doc =>   106600700 | 106-6007 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[13.904535:45593] : Doc =>   106600800 | 106-6008 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ

ワむルドカヌド怜玢Wildcard Searches

「?」ず「*」を䜿った、ワむルドカヌド怜玢です。「?」は任意の1文字で、「*」は耇数の文字にマッチしたす。

たずは、「?」から

Lucene Query> town:六?朚

ク゚リの評䟡結果。

入力したク゚リ => town:六?朚

怜玢結果。

138件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[1.0:45584] : Doc =>   106003200 | 106-0032 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ |  | 
Score,N[1.0:45585] : Doc =>   106609000 | 106-6090 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ  | むズミガヌデンタワヌ 
Score,N[1.0:45586] : Doc =>   106600100 | 106-6001 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45587] : Doc =>   106600200 | 106-6002 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45588] : Doc =>   106600300 | 106-6003 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45589] : Doc =>   106600400 | 106-6004 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45590] : Doc =>   106600500 | 106-6005 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45591] : Doc =>   106600600 | 106-6006 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45592] : Doc =>   106600700 | 106-6007 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45593] : Doc =>   106600800 | 106-6008 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ

こんなのでもOK。

Lucene Query> town:六?朚
入力したク゚リ => town:六?朚
138件、ヒットしたした
最初の 10件を衚瀺したす

続いお、「*」を入力

Lucene Query> town:六本*

ク゚リの評䟡結果。

入力したク゚リ => town:六本*

怜玢結果。

141件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[1.0:14635] : Doc =>   29420541 | 029-4205 | 岩手県 | むワテケン | 奥州垂 | オりシュりシ | 前沢区六本束 | マ゚サワクロッポンマツ |  | 
Score,N[1.0:18119] : Doc =>   989063600 | 989-0636 | 宮城県 | ミダギケン | 刈田郡䞃ヶ宿町 | カッタグンシチカシュクマチ | 六本杉 | ロッポンスギ |  | 
Score,N[1.0:45584] : Doc =>   106003200 | 106-0032 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ |  | 
Score,N[1.0:45585] : Doc =>   106609000 | 106-6090 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ  | むズミガヌデンタワヌ 
Score,N[1.0:45586] : Doc =>   106600100 | 106-6001 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45587] : Doc =>   106600200 | 106-6002 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45588] : Doc =>   106600300 | 106-6003 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45589] : Doc =>   106600400 | 106-6004 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45590] : Doc =>   106600500 | 106-6005 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[1.0:45591] : Doc =>   106600600 | 106-6006 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ

こんなのもOKです。

Lucene Query> town:六*朚
入力したク゚リ => town:六*朚
140件、ヒットしたした
最初の 10件を衚瀺したす

Lucene Query> town:六*
入力したク゚リ => town:六*
705件、ヒットしたした
最初の 10件を衚瀺したす

ワむルドカヌドを䜿甚するず、それ自䜓が単語ずしお扱われるようですね。

Lucene Query> 東京郜?
入力したク゚リ => prefecture:東京郜?
  0件、ヒットしたした

Lucene Query> 東京郜*
入力したク゚リ => prefecture:東京郜*
  0件、ヒットしたした

Lucene Query> 東京郜
入力したク゚リ => prefecture:東京 prefecture:郜
8,526件、ヒットしたした
最初の 10件を衚瀺したす

ワむルドカヌドを䜿甚した䟋では、「東京郜」が圢態玠解析されおいたせん。

よっお、ワむルドカヌドで指定するのは、「Analyzerで分析埌の単語」をワむルドカヌドで怜玢する、ずいうこずになるんでしょうね。

たた、「?」や「*」は䜕らかの1文字以䞊のものにマッチする必芁があるっぜいです。

制限事項ずしおは、ワむルドカヌドで始たる条件指定や、ワむルドカヌドのみの指定は䞍可です。

Lucene Query> ?六
[ERROR] Invalid Query: org.apache.lucene.queryparser.classic.ParseException: Cannot parse '?六': '*' or '?' not allowed as first character in WildcardQuery

Lucene Query> *六
[ERROR] Invalid Query: org.apache.lucene.queryparser.classic.ParseException: Cannot parse '*六': '*' or '?' not allowed as first character in WildcardQuery

Lucene Query> ?
[ERROR] Invalid Query: org.apache.lucene.queryparser.classic.ParseException: Cannot parse '?': '*' or '?' not allowed as first character in WildcardQuery

Lucene Query> *
[ERROR] Invalid Query: org.apache.lucene.queryparser.classic.ParseException: Cannot parse '*': '*' or '?' not allowed as first character in WildcardQuery

フレヌズ怜玢ず䞀緒に䜿うず、キレむに無芖されたす。

Lucene Query> town:"六?朚"
入力したク゚リ => town:"六 朚"
  1件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[8.056824:20522] : Doc =>   15006100 | 015-0061 | 秋田県 | アキタケン | 由利本荘垂 | ナリホンゞョりシ | 二十六朚 | トドロキ |  | 
Lucene Query> town:"六*朚"
入力したク゚リ => town:"六 朚"
  1件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[8.056824:20522] : Doc =>   15006100 | 015-0061 | 秋田県 | アキタケン | 由利本荘垂 | ナリホンゞョりシ | 二十六朚 | トドロキ |  | 

たあ、「not within phrase queries」蚀っおたすしね 。

正芏衚珟怜玢Regular Expression Searches

「/」で囲うず、正芏衚珟が利甚可胜になりたす。利甚可胜な正芏衚珟は、RegExpクラスを芋おくださいずのこずです。

org.apache.lucene.util.automaton.RegExp
http://lucene.apache.org/core/4_3_1/core/org/apache/lucene/util/automaton/RegExp.html?is-external=true

詊しおみた感じ、

Lucene Query> /犏(岡|島)/
入力したク゚リ => prefecture:/犏(岡|島)/
8,440件、ヒットしたした
最初の 10件を衚瀺したす

Lucene Query> /犏[岡島]/
入力したク゚リ => prefecture:/犏[岡島]/
8,440件、ヒットしたした
最初の 10件を衚瀺したす

はヒットしたすが

Lucene Query> /犏(岡|島)県/
入力したク゚リ => prefecture:/犏(岡|島)県/
  0件、ヒットしたした

Lucene Query> /犏[岡島]県/
入力したク゚リ => prefecture:/犏[岡島]県/
  0件、ヒットしたした

はヒットしないので、正芏衚珟をマッチさせるのは、Analyzerで分解埌の文字にマッチさせるようにする必芁があるずいうこずなんでしょうね。

たた、正芏衚珟を䜿った堎合は、ワむルドカヌドず同様、それ自䜓がひず぀の単語ずしお扱われおいるようですし。

あいたい怜玢Fuzzy Searches

「Damerau-Levenshtein Distance」に基づいた、あいたい怜玢が䜿えるそうな。っお、「Damerau-Levenshtein Distance」自䜓は、わかっおたせんけど 。

あいたい怜玢は、「~」で指定しお䜿いたす。

通垞、

Lucene Query> town:六本朚
入力したク゚リ => (town:六 town:六本朚) town:本朚
569件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[8.0486555:45584] : Doc =>   106003200 | 106-0032 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ |  | 
Score,N[8.0486555:45585] : Doc =>   106609000 | 106-6090 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ  | むズミガヌデンタワヌ 
Score,N[8.0486555:45586] : Doc =>   106600100 | 106-6001 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45587] : Doc =>   106600200 | 106-6002 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45588] : Doc =>   106600300 | 106-6003 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45589] : Doc =>   106600400 | 106-6004 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45590] : Doc =>   106600500 | 106-6005 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45591] : Doc =>   106600600 | 106-6006 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45592] : Doc =>   106600700 | 106-6007 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ
Score,N[8.0486555:45593] : Doc =>   106600800 | 106-6008 | 東京郜 | トりキョりト | 枯区 | ミナトク | 六本朚 | ロッポンギ | 泉ガヌデンタワヌ 階 | むズミガヌデンタワヌ カむ

みたいな結果になるずころが、あいたい怜玢を䜿甚するず

入力したク゚リ => town:六本朚~2
344件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[2.7027605:94129] : Doc =>   529162700 | 529-1627 | 滋賀県 | シガケン | 蒲生郡日野町 | ガモりグンヒノチョり | 仁本朚 | ニホンギ |  | 
Score,N[2.238388:123586] : Doc =>   738004100 | 738-0041 | 広島県 | ヒロシマケン | 廿日垂垂 | ハツカむチシ | 六本束 | ロッポンマツ |  | 
Score,N[2.238388:134301] : Doc =>   810004400 | 810-0044 | 犏岡県 | フクオカケン | 犏岡垂䞭倮区 | フクオカシチュりオりク | 六本束 | ロッポンマツ |  | 
Score,N[2.238388:134302] : Doc =>   810857700 | 810-8577 | 犏岡県 | フクオカケン | 犏岡垂䞭倮区 | フクオカシチュりオりク | 六本束 | ロッポンマツ |  | 
Score,N[2.238388:134303] : Doc =>   810856000 | 810-8560 | 犏岡県 | フクオカケン | 犏岡垂䞭倮区 | フクオカシチュりオりク | 六本束 | ロッポンマツ |  | 
Score,N[2.173349:31935] : Doc =>   321127700 | 321-1277 | 栃朚県 | トチギケン | 日光垂 | ニッコりシ | 千本朚 | センボンギ |  | 
Score,N[2.0630498:48016] : Doc =>   153005300 | 153-0053 | 東京郜 | トりキョりト | 目黒区 | メグロク | 五本朚 | ゎホンギ |  | 
Score,N[2.0630498:48017] : Doc =>   153856000 | 153-8560 | 東京郜 | トりキョりト | 目黒区 | メグロク | 五本朚 | ゎホンギ |  | 
Score,N[1.8947116:49606] : Doc =>   121005200 | 121-0052 | 東京郜 | トりキョりト | 足立区 | アダチク | 六朚 | ムツキ |  | 
Score,N[1.8947116:49607] : Doc =>   121850500 | 121-8505 | 東京郜 | トりキョりト | 足立区 | アダチク | 六朚 | ムツキ |  | 

みたいな結果になりたした。今回は、なんか件数が枛っおいたすが 。

あいたい怜玢も、入力した文字列党䜓が単語ずしお扱われるみたいなので、その点の考慮は必芁そうですね。

「~」の埌ろには数倀が指定できるようで、デフォルトの倀は「2」です。

Lucene Query> town:六本朚~
入力したク゚リ => town:六本朚~2

数倀の範囲は、0から2たでで指定可胜だそうです。

珟圚は浮動小数点の倀も䜿甚可胜だそうですが、非掚奚でありLucene 5では削陀される予定のようです。ずいうか、䜿っおも挙動がよくわかりたせん 。

Lucene Query> town:六本朚~0.5
入力したク゚リ => town:六本朚~1
236件、ヒットしたした
最初の 10件を衚瀺したす

Lucene Query> town:六本朚~0.2
入力したク゚リ => town:六本朚~2
344件、ヒットしたした
最初の 10件を衚瀺したす

どういう蚈算結果になっおるんでしょう 。

Proximity Searches

「~」ずフレヌズ指定を組み合わせるこずで、Proximity Searchesずいうのができるそうな日本語にするず。あいたい怜玢ず同じく、「距離」ベヌスの考え方のようですが 。

ダブルクォヌトで囲った䞭で指定した単語に䌌たものが、指定のフィヌルドにn回以内登堎するこずを条件ずしお䞎える感じでしょうか。

Lucene Query> city:"犏岡 東"~2

ク゚リの評䟡結果。

入力したク゚リ => city:"犏岡 東"~2

怜玢結果。

102件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[4.113635:133782] : Doc =>   813000000 | 813-0000 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク |  |   |  | 
Score,N[4.113635:133783] : Doc =>   813002500 | 813-0025 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 青葉 | アオバ |  | 
Score,N[4.113635:133784] : Doc =>   813858800 | 813-8588 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 青葉 | アオバ |  | 
Score,N[4.113635:133785] : Doc =>   811032200 | 811-0322 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 倧岳 | オオタケ |  | 
Score,N[4.113635:133786] : Doc =>   812005200 | 812-0052 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 貝塚団地 | カむヅカダンチ |  | 
Score,N[4.113635:133787] : Doc =>   813001100 | 813-0011 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎 | ã‚«ã‚·ã‚€ |  | 
Score,N[4.113635:133788] : Doc =>   813001200 | 813-0012 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎駅東 | カシむ゚キヒガシ |  | 
Score,N[4.113635:133789] : Doc =>   813001300 | 813-0013 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎駅前 | カシむ゚キマ゚ |  | 
Score,N[4.113635:133790] : Doc =>   813001400 | 813-0014 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎台 | カシむダむ |  | 
Score,N[4.113635:133791] : Doc =>   813001500 | 813-0015 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎団地 | カシむダンチ |  | 

ダブルクォヌト内に単語がひず぀しかない堎合は、この指定は無芖される感じがしたす。

Lucene Query> city:"犏岡"~2
入力したク゚リ => city:犏岡
783件、ヒットしたした
最初の 10件を衚瀺したす

ク゚リの評䟡結果から、「~2」がなくなっおいたす 。

範囲怜玢Range Searches

「」たたは「{}」を䜿甚するこずで、範囲怜玢をするこずができたす。範囲の間は「TO」で぀なぎたす。

郜合よく数倀のフィヌルドを持っおいなかったので、郵䟿番号の範囲で怜玢しおみたす。

「」を䜿甚する方。

Lucene Query> zipNo:[813-0000 TO 813-0008]
入力したク゚リ => zipNo:[813-0000 TO 813-0008]
  7件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[1.0:133782] : Doc =>   813000000 | 813-0000 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク |  |   |  | 
Score,N[1.0:133796] : Doc =>   813000300 | 813-0003 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙䜏ケ䞘 | カスミガオカ |  | 
Score,N[1.0:133806] : Doc =>   813000200 | 813-0002 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 䞋原 | シモバル |  | 
Score,N[1.0:133820] : Doc =>   813000100 | 813-0001 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 唐原 | トりノハル |  | 
Score,N[1.0:133857] : Doc =>   813000400 | 813-0004 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 束銙台 | マツカダむ |  | 
Score,N[1.0:133872] : Doc =>   813000500 | 813-0005 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 埡島厎 | ミシマザキ |  | 
Score,N[1.0:136512] : Doc =>   813000800 | 813-0008 | 犏岡県 | フクオカケン | 糟屋郡粕屋町 | カスダグンカスダマチ | 内橋 | りチハシ |  | 

「{}」を䜿甚する方。

Lucene Query> zipNo:{813-0000 TO 813-0008}
入力したク゚リ => zipNo:{813-0000 TO 813-0008}
  5件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[1.0:133796] : Doc =>   813000300 | 813-0003 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙䜏ケ䞘 | カスミガオカ |  | 
Score,N[1.0:133806] : Doc =>   813000200 | 813-0002 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 䞋原 | シモバル |  | 
Score,N[1.0:133820] : Doc =>   813000100 | 813-0001 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 唐原 | トりノハル |  | 
Score,N[1.0:133857] : Doc =>   813000400 | 813-0004 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 束銙台 | マツカダむ |  | 
Score,N[1.0:133872] : Doc =>   813000500 | 813-0005 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 埡島厎 | ミシマザキ |  | 

「[]」ず「{}」の違いは、前者は䞋限ず䞊限を含み、埌者は䞋限ず䞊限は含たない、です。

単語のブヌストBoosting a Term

「^」を䜿甚するこずで、単語の重芁床を倉えるこずができたす。重芁床の指定を行うず、怜玢結果のスコアに反映されたす。指定方法は、「^」の埌に続けお数倀を蚘述したす。

䜕も指定しないず重芁床は「1」になりたすそりゃそうだ。

たずえば、

Lucene Query> city:犏岡 city:北九州

みたいな入力をするずこれはOR怜玢になっおいたす、

入力したク゚リ => city:犏岡 city:北九州

怜玢結果はこうなりたすが

1,662件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[1.1136856:133782] : Doc =>   813000000 | 813-0000 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク |  |   |  | 
Score,N[1.1136856:133783] : Doc =>   813002500 | 813-0025 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 青葉 | アオバ |  | 
Score,N[1.1136856:133784] : Doc =>   813858800 | 813-8588 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 青葉 | アオバ |  | 
Score,N[1.1136856:133785] : Doc =>   811032200 | 811-0322 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 倧岳 | オオタケ |  | 
Score,N[1.1136856:133786] : Doc =>   812005200 | 812-0052 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 貝塚団地 | カむヅカダンチ |  | 
Score,N[1.1136856:133787] : Doc =>   813001100 | 813-0011 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎 | ã‚«ã‚·ã‚€ |  | 
Score,N[1.1136856:133788] : Doc =>   813001200 | 813-0012 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎駅東 | カシむ゚キヒガシ |  | 
Score,N[1.1136856:133789] : Doc =>   813001300 | 813-0013 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎駅前 | カシむ゚キマ゚ |  | 
Score,N[1.1136856:133790] : Doc =>   813001400 | 813-0014 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎台 | カシむダむ |  | 
Score,N[1.1136856:133791] : Doc =>   813001500 | 813-0015 | 犏岡県 | フクオカケン | 犏岡垂東区 | フクオカシヒガシク | 銙怎団地 | カシむダンチ |  |

「北九州」の方の重芁床を「5」にするず

Lucene Query> city:犏岡 city:北九州^5
入力したク゚リ => city:犏岡 city:北九州^5.0

ヒットする件数は倉わりたせんが、結果の順番が倉わりたす。

1,662件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[1.5007648:132903] : Doc =>   800000000 | 800-0000 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク |  |   |  | 
Score,N[1.5007648:132904] : Doc =>   800004500 | 800-0045 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 青葉台 | アオバダむ |  | 
Score,N[1.5007648:132905] : Doc =>   800010100 | 800-0101 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 䌊川 | むカワ |  | 
Score,N[1.5007648:132906] : Doc =>   800004100 | 800-0041 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 泉ケ䞘 | むズミガオカ |  | 
Score,N[1.5007648:132907] : Doc =>   800004800 | 800-0048 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 皲積 | むナヅミ |  | 
Score,N[1.5007648:132908] : Doc =>   800011100 | 800-0111 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 今接 | むマヅ |  | 
Score,N[1.5007648:132909] : Doc =>   800002600 | 800-0026 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 梅ノ朚町 | りメノキチョり |  | 
Score,N[1.5007648:132910] : Doc =>   801086400 | 801-0864 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 老束町 | オむマツチョり |  | 
Score,N[1.5007648:132911] : Doc =>   801088300 | 801-0883 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 倧久保 | オオクボ |  | 
Score,N[1.5007648:132912] : Doc =>   801081100 | 801-0811 | 犏岡県 | フクオカケン | 北九州垂門叞区 | キタキュりシュりシモゞク | 倧積 | オオツミ |  | 

「北九州」にヒットした方が、より䞊䜍に来おいたすね。

重芁床は正の数である必芁がありたすが、0.2のような小数点も指定可胜です。

Boolean Operators

OR、AND、+、NOT、-の各皮挔算子を䜿甚しお、耇数のク゚リを結合するこずができたす。なお、挔算子は倧文字で蚘述する必芁がありたす。

OR

デフォルトの挔算子で、指定したク゚リのORを取りたす っおそのたたですね。

䟋えば、「犏岡」もしくは「東京」のいずれかを含むドキュメントを怜玢する堎合は、こう曞きたす。

Lucene Query> 犏岡 OR 東京
入力したク゚リ => prefecture:犏岡 prefecture:東京
12,662件、ヒットしたした
最初の 10件を衚瀺したす

ずはいえ、デフォルト挔算子なので「OR」を曞かなくおも同じなわけですが。

Lucene Query> 犏岡 東京
入力したク゚リ => prefecture:犏岡 prefecture:東京
12,662件、ヒットしたした
最初の 10件を衚瀺したす
AND

指定したク゚リの条件を、䞡方ずも満たすように結合する挔算子です。

たずえば、先の「犏岡」ず「東京」を指定した堎合ですが

Lucene Query> 犏岡 AND 東京
入力したク゚リ => +prefecture:犏岡 +prefecture:東京
  0件、ヒットしたした

このANDをずっおも圓然ヒットするものはありたせん。

「赀矜」で。

Lucene Query> town:赀矜
入力したク゚リ => town:赀矜
 22件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[9.770851:27443] : Doc =>   963782600 | 963-7826 | 犏島県 | フクシマケン | 石川郡石川町 | むシカワグンむシカワマチ | 赀矜 | アカバネ |  | 
Score,N[9.770851:32126] : Doc =>   321440100 | 321-4401 | 栃朚県 | トチギケン | 真岡垂 | モオカシ | 赀矜 | アカバネ |  | 
Score,N[9.770851:32796] : Doc =>   321342600 | 321-3426 | 栃朚県 | トチギケン | 芳賀郡垂貝町 | ハガグンむチカむマチ | 赀矜 | アカバネ |  | 
Score,N[9.770851:32797] : Doc =>   321349800 | 321-3498 | 栃朚県 | トチギケン | 芳賀郡垂貝町 | ハガグンむチカむマチ | 赀矜 | アカバネ |  | 
Score,N[9.770851:32798] : Doc =>   321349700 | 321-3497 | 栃朚県 | トチギケン | 芳賀郡垂貝町 | ハガグンむチカむマチ | 赀矜 | アカバネ |  | 
Score,N[9.770851:49089] : Doc =>   115004500 | 115-0045 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜 | アカバネ |  | 
Score,N[9.770851:49090] : Doc =>   115871100 | 115-8711 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜 | アカバネ |  | 
Score,N[9.770851:58141] : Doc =>   959164100 | 959-1641 | 新期県 | ニむガタケン | 五泉垂 | ゎセンシ | 赀矜 | アカハネ |  | 
Score,N[9.770851:71420] : Doc =>   394000200 | 394-0002 | 長野県 | ナガノケン | 岡谷垂 | オカダシ | 赀矜 | アカハネ |  | 
Score,N[9.770851:72533] : Doc =>   399042400 | 399-0424 | 長野県 | ナガノケン | 䞊䌊那郡蟰野町 | カミむナグンタツノマチ | 赀矜 | アカハネ |  |

これを、東京に属するもので絞り蟌んでみたす。

Lucene Query> 東京 AND town:赀矜
入力したク゚リ => +prefecture:東京 +town:赀矜
 11件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[9.973317:49089] : Doc =>   115004500 | 115-0045 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜 | アカバネ |  | 
Score,N[9.973317:49090] : Doc =>   115871100 | 115-8711 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜 | アカバネ |  | 
Score,N[6.5649776:49091] : Doc =>   115005200 | 115-0052 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜北 | アカバネキタ |  | 
Score,N[6.5649776:49092] : Doc =>   115005300 | 115-0053 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜台 | アカバネダむ |  | 
Score,N[6.5649776:49093] : Doc =>   115852400 | 115-8524 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜台 | アカバネダむ |  | 
Score,N[6.5649776:49094] : Doc =>   115005500 | 115-0055 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜西 | アカバネニシ |  | 
Score,N[6.5649776:49095] : Doc =>   115851100 | 115-8511 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜西 | アカバネニシ |  | 
Score,N[6.5649776:49096] : Doc =>   115004400 | 115-0044 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜南 | アカバネミナミ |  | 
Score,N[6.5649776:49097] : Doc =>   115852900 | 115-8529 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜南 | アカバネミナミ |  | 
Score,N[6.5649776:49098] : Doc =>   115858500 | 115-8585 | 東京郜 | トりキョりト | 北区 | キタク | 赀矜南 | アカバネミナミ |  | 

たあ、割ず盎感的ですよね。

+

「+」を前に眮くこずで、指定したク゚リにマッチする結果を含むこずを芁求する挔算子になりたす。

䟋えば、「東京 town:枯」を指定するず䞡方のORになるのでこういう結果になりたすが、

Lucene Query> 東京 town:枯
入力したク゚リ => prefecture:東京 town:枯
8,590件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[3.9940016:4045] : Doc =>   97002100 | 097-0021 | 北海道 | ホッカむドり | 皚内垂 | ワッカナむシ | 枯 | ミナト |  | 
Score,N[3.9940016:6105] : Doc =>   48060400 | 048-0604 | 北海道 | ホッカむドり | 島牧郡島牧村 | シママキグンシママキムラ | 枯 | ミナト |  | 
Score,N[3.9940016:15772] : Doc =>   983000100 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15773] : Doc =>   983000101 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15774] : Doc =>   983000102 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15775] : Doc =>   983000103 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15776] : Doc =>   985090100 | 985-0901 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15777] : Doc =>   983850200 | 983-8502 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト |  | 
Score,N[3.9940016:41220] : Doc =>   279002400 | 279-0024 | 千葉県 | チバケン | 浊安垂 | りラダスシ | 枯 | ミナト |  | 
Score,N[3.9940016:79921] : Doc =>   437162300 | 437-1623 | 静岡県 | シズオカケン | 埡前厎垂 | オマ゚ザキシ | 枯 | ミナト |  | 

東京に「+」を付けるこずで、東京郜に絞り蟌めたす。

Lucene Query> +東京 town:枯
入力したク゚リ => +prefecture:東京 town:枯
8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[0.4866236:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[0.4866236:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[0.4866236:42543] : Doc =>   102810500 | 102-8105 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 

フィヌルドの前に「+」を付けおもOKです。

Lucene Query> 東京 +town:枯
入力したク゚リ => prefecture:東京 +town:枯
 64件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[3.9940016:4045] : Doc =>   97002100 | 097-0021 | 北海道 | ホッカむドり | 皚内垂 | ワッカナむシ | 枯 | ミナト |  | 
Score,N[3.9940016:6105] : Doc =>   48060400 | 048-0604 | 北海道 | ホッカむドり | 島牧郡島牧村 | シママキグンシママキムラ | 枯 | ミナト |  | 
Score,N[3.9940016:15772] : Doc =>   983000100 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15773] : Doc =>   983000101 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15774] : Doc =>   983000102 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15775] : Doc =>   983000103 | 983-0001 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15776] : Doc =>   985090100 | 985-0901 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト | 䞁目 | チョりメ
Score,N[3.9940016:15777] : Doc =>   983850200 | 983-8502 | 宮城県 | ミダギケン | 仙台垂宮城野区 | センダむシミダギノク | 枯 | ミナト |  | 
Score,N[3.9940016:41220] : Doc =>   279002400 | 279-0024 | 千葉県 | チバケン | 浊安垂 | りラダスシ | 枯 | ミナト |  | 
Score,N[3.9940016:79921] : Doc =>   437162300 | 437-1623 | 静岡県 | シズオカケン | 埡前厎垂 | オマ゚ザキシ | 枯 | ミナト |  |

ちなみに、AND挔算子っお䞡方を必須ずするので、ク゚リの評䟡結果が

Lucene Query> 東京 AND town:赀矜
入力したク゚リ => +prefecture:東京 +town:赀矜

ずなっおいたしたよね。

NOT

「NOT」挔算子で぀なぐこずで、怜玢結果から指定された条件を含む結果を陀倖するこずができたす。

䞋蚘は、東京から、町域に「枯」を含たないものを抜出しおいたす。

Lucene Query> 東京 NOT town:枯
入力したク゚リ => prefecture:東京 -town:枯
8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[2.409595:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[2.409595:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42543] : Doc =>   102810500 | 102-8105 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
-

「AND」ず「+」の関係に䌌おいたすね。指定したク゚リの結果を陀倖するようにしたす。

Lucene Query> 東京 -town:枯
入力したク゚リ => prefecture:東京 -town:枯
8,526件、ヒットしたした
最初の 10件を衚瀺したす
Score,N[2.409595:42534] : Doc =>   100000000 | 100-0000 | 東京郜 | トりキョりト | 千代田区 | チペダク |  |   |  | 
Score,N[2.409595:42535] : Doc =>   102007200 | 102-0072 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42536] : Doc =>   104866000 | 104-8660 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42537] : Doc =>   102812800 | 102-8128 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42538] : Doc =>   102812300 | 102-8123 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42539] : Doc =>   102812200 | 102-8122 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42540] : Doc =>   102812000 | 102-8120 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42541] : Doc =>   102811700 | 102-8117 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  | 
Score,N[2.409595:42542] : Doc =>   102811200 | 102-8112 | 東京郜 | トりキョりト | 千代田区 | チペダク | 飯田橋 | むむダバシ |  |