Обновить
18
0
SuDDeN@SuDDeN

Пользователь

Отправить сообщение
Общего ответа у меня лично нет. Я думаю все зависит от конкретной ситуации. Простой полнотекстовый поиск сейчас есть у многих БД (mongodb, postres). Руками в конце концов (кстати, в большинстве случаев самый оптимальный способ, легко адаптируется и легко выбрасывается). И даже люцена может быть не оверкилл. В случае если есть прошаренный в ней человек, который может ее за пять минут подключить и четко знает где и как ее настраивать.
Вы комменты почитайте;) Выходит что самое-то для хабра, как это ни печально.
Вы не колесо, вы ракетный двигатель на велосипед ставите. Реактивный двигатель тоже «готовое, проверенное решение с существенным запасом для роста» ;) Вот только на велосипед лучше что-то другое приделать… Ну и остальные доводы — классический overengineering, как по книжке :)
Дело не в том, проба это или нет. Просто то, что вы делаете — это типичный overengineering. Вы пытаетесь использовать сложную и тяжелую библиотеку, там где можно обойтись чем-то маленьким и конкретным. Люцена предназначена для полнотекстового поиска по большому объему (мегабайты, гигабайты) слабоструктурированной информации. Вам же нужен кастомный парсер распознающий небольшое количество редко меняющихся ключевых слов и каких-то личных данных. Любое наколеночное решение будет проще и скорее всего быстрее.
з.ы. Поймите меня правильно, я не для того чтобы задеть вас это пишу, просто сам лично не раз пытался заюзать что-то такое мощное и прикольное, а потом понимал что оно не нужно. Ну и могу ошибаться, не зная какой-то внутренней специфики.
Люцена для поиска по нескольким десяткам вариантов? Вы это серьезно :)? Это даже не из пушки по воробьям…
Аналог zip скорее sliding, а не grouped

scala> val l = Seq(1, 2, 3, 4, 5)
l: Seq[Int] = List(1, 2, 3, 4, 5)

scala> l zip (l drop 1)
res0: Seq[(Int, Int)] = List((1,2), (2,3), (3,4), (4,5))

scala> l sliding 2
res1: Iterator[Seq[Int]] = non-empty iterator

scala> l sliding 2 foreach println
List(1, 2)
List(2, 3)
List(3, 4)
List(4, 5)

scala> l grouped 2 foreach println
List(1, 2)
List(3, 4)
List(5)
Вопрос «зачем» не раскрыт, но написано хорошо, за это плюс.
и еще +1 за клавиатуру :)
И тут вспомнился «Конец Вечности» Азимова :)
Угу, я его и имел в виду, просто не стал упоминать то, что сам не пробовал
это для случая когда у нас известное заранее число опциональных параметров (во всяких билдерах например)
Еще можно пользуясь неявной конвертацией Option в Iterable делать вот так (не все правда это одобряют):
Some(1) ++ None ++ Some(2) ++ None ++ Some(3) // == Seq(1, 2, 3)

++ это метод для сложения 2-х коллекций
В простых случаях, когда не нужна сложная валидация с сообщениями на каждую ошибку на Option и for можно городить вот такие чудные конструкции (вроде бы и без комментариев должно быть читаемо):

case class User(login: String, password: String, blocked: Boolean)
def getParam(name: String): Option[String]
def isSecure(password: String): Boolean
def checkUser(login: String, password: String): Option[User]
def changePassword(user: User, newPassword: String)

for {
	login <- getParam("login") if !login.isEmpty
	password <- getParam("password") if isSecure(password)
	newPassword <- getParam("new_password") 
	confirmPassword <- getParam("confirm_password") if confirmPassword == newPassword
	user <- checkUser(login, password) if !user.blocked
} changePassword(user, newPassword)


В более сложных случаях уже надо на Either переходить или что-то подобное.
з.ы. в примере с Partial Functions достаточно фигурных скобок:
iterable.map {
    case Some(value) => whenValue(value)
    case None => whenNothing()
}
Самое лучшее, что вспоминается по этому поводу habrahabr.ru/post/151902/
Agile-методы, на мой взгляд, являются очень прогрессивными практиками как разработки, так и менеджмента, и могут быть использованы в других отраслях экономики.

Чур меня, чур!
А почему не scala? О размере дистрибутива беспокоились?
Выглядит любопытно, надо попробовать. Ну и с первый постом что-ли :)
плюсую всячески :)
Не только, в первую очередь документация (только вчера новый сайт для sbt открыли).
Ivy может использовать репозитории мавена, при чем тут сам мавен? Просто они есть, их много, и глупо их не использовать.

Да некоторые простые вещи в sbt делаются для новичка не совсем просто. Но это все скорее детские болезни, typesafe обещают все заполировать. Вы лучше расскажите как, допустим, в мавене подключить все либы из произвольной локальной папки без плясок с бубном? Хотя может, наконец, запили… Или что-то нетривиальное сделать с файлами. В мавен надо искать плагины, разбираться в документации к ним, если она есть вообще, ну или подключать ант и делать им. В sbt просто пишешь на скале все, что тебе нужно было сделать, и вот свой плагин готов.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность